ich baue derzeit alle URLs auf SEO freundliche URLs um, also in meinem Fall slug.
In einer view/form habe ich allerdings Probleme das richtig zu realisieren. Es geht hier um das main model, nach dem erstellen bekomme ich es nicht hin slug auszulesen und dorthin weiterzuleiten.
views.py
Code: Alles auswählen
class CreatePostView(LoginRequiredMixin, CreateView):
model = Post
message = _("Your post has been created.")
form_class = PostForm
template_name = 'post/post_create.html'
def form_valid(self, form):
form.instance.user = self.request.user
return super().form_valid(form)
def get_success_url(self):
messages.success(self.request, self.message)
print('slug')
models.py
Code: Alles auswählen
class Post(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL, null=True, related_name="author",
on_delete=models.SET_NULL)
image = models.ImageField(
_('Featured image'), upload_to='post_pictures/%Y/%m/%d/')
timestamp = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=255, null=False, unique=True)
slug = models.SlugField(max_length=80, null=True, blank=True)
postcontent = MarkdownxField()
edited = models.BooleanField(default=False)
objects = PostQuerySet.as_manager()
class Meta:
verbose_name = _("Post")
verbose_name_plural = _("Posts")
ordering = ("-timestamp",)
def __str__(self):
return self.title
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(f"{self.user.username}-{self.title}",
to_lower=True, max_length=80)
forms.py
Code: Alles auswählen
class PostForm(forms.ModelForm):
status = forms.CharField(widget=forms.HiddenInput())
edited = forms.BooleanField(widget=forms.HiddenInput(), required=False, initial=False)
postcontent = MarkdownxFormField()
class Meta:
model = Post
fields = ["title", "postcontent", "image", "tags", "status", "edited"]
Wie könnte man soetwas regeln?