Django принимает объект по slug

Здравствуйте, я здесь новенький и новичок в django/программировании

Я пытаюсь сделать несколько основных сотрудников, но мне не нравится то, что я сделал. Должно быть лучшее решение.

class EventPostCreateView(CreateView):
    model = EventPost
    form_class = EventPostForms

   
    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.event = Event.objects.filter(
                slug=self.kwargs.get("slug")).first()
        self.object.post = self.object.pk
        self.object.save()
        return super().form_valid(form)

    def get_success_url(self):
        return reverse("event:event", kwargs={"slug": self.object.event.slug}) 

Оптимизировать

моя проблема в функции from_valid и мне не нравится это решение для фильтрации.

Как я могу сделать это лучше и если кто-нибудь объяснит мне, как сделать это в модели, а не в View, я буду пить за его код до нового года.

class Event(models.Model):

    name = models.CharField(max_length=64, blank=False, null=False)
    place = models.CharField(max_length=64, blank=False, null=False)                     # from poligon/place
    tags = models.ManyToManyField("event.EventTags", related_name="Tags", blank=True)
    owner = models.OneToOneField("Org.Organizations", on_delete=models.CASCADE, related_name="owner")             # must be created by founder
    start_date = models.DateField()
    end_date = models.DateField()
    body = models.TextField(blank=True, null=True)
    additional_block1 = models.TextField(blank=True, null=True)
    slug = models.SlugField(max_length=255, unique=True, db_index=True, verbose_name="URL")
    # img = models.ImageField(upload_to='media')                       # Pillow required
    # rules =                                                  # make rules base on base rule + additional block by orgs
    # Date_creation =
    if TYPE_CHECKING:
        objects: models.Manager

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse("event", kwargs={"slug": self.slug})

    def save(self, *args, **kwargs):
        self.slug = slugify(self.name)
        super(Event, self).save(*args, **kwargs)
class EventPost(models.Model):
    event = models.ForeignKey(Event, on_delete=models.CASCADE, related_name="post")
    name = models.CharField(max_length=64)
    body = models.TextField(blank=True, null=True)

    def __str__(self):
        return self.name
class EventPostForms(forms.ModelForm):
    class Meta:
        model = EventPost
        fields = ["name", "body" ]
Вернуться на верх