Django return zu SEO Url nach form

Django, Flask, Bottle, WSGI, CGI…
Antworten
jinroo
User
Beiträge: 12
Registriert: Dienstag 13. Oktober 2015, 16:30

Hallo,

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"]
Da slug über models gehandhabt wird und nicht direkt über die form, weiss ich nicht wie ich die slug url auslesen kann um dann anschliessend auf die URL weiterzuleiten, für den post den ich soeben erstellt habe.

Wie könnte man soetwas regeln?
Antworten