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" ]