在 Django 中为新帖子保存 category_id

为博客保存/创建新帖子时遇到问题。

我已经有了 Post 模型,每个帖子都有自己的类别。所以我也有类别模型。在 CreateView 模板中,我已经从数据库中获取了所有类别并显示在选择/选项标签中。问题是我想在创建新帖子时保存 category_id。但我不知道怎么办?如何判断表单 POSTED 是否获取 category_id 并将其保存为具有 category_id 字段的 Post 模型?


看法:

class PostCreateForm(LoginRequiredMixin, CreateView):

    model = Post

    fields = ['title', 'short_text', 'long_text', 'post_pic']


    def get_context_data(self, **kwargs):

        context = super(PostCreateForm, self).get_context_data(**kwargs)

        context['categories'] = Category.objects.all().order_by('id')

        return context



    def form_valid(self, form, **kwargs):

        form.instance.author = self.request.user

        return super().form_valid(form)

模型:

class Category(models.Model):

    title = models.CharField(max_length=255)


    def __str__(self):

        return self.title



class Post(models.Model):

    title               = models.CharField(max_length=255)

    short_text          = models.TextField()

    long_text           = models.TextField()

    post_pic            = models.ImageField(default="post_pic.jpg", 

    blank=False, upload_to='post_pics')

    date_published      = models.DateTimeField(default=timezone.now())

    date_upadated       = models.DateTimeField(auto_now=True)

    author              = models.ForeignKey(User, on_delete=models.CASCADE)

    category            = models.ForeignKey(Category, default=None, 

    on_delete=models.CASCADE)


def __str__(self):

    return self.title


def get_absolute_url(self):

    return reverse('post-detail', kwargs={'pk': self.pk})`

post_form.html

{% extends 'blog/base.html' %}

{% load crispy_forms_tags %}


{% block title_head %}

    New Post

{% endblock title_head %}



慕标5832272
浏览 177回答 2
2回答

qq_遁去的一_1

有几种方法可以实现这一点。这是最简单的:如果您希望 Catagories 保持不变,那么您可以对它们进行硬编码,并在模型上使用CharField带有choices=关键字的a Post。class Post(models.Model):    CATEGORY_CHOICES = (        ('Horror', 'Horror'),        ('Romance', 'Romance'),        ('Comedy', 'Comedy'),    )    category = models.CharField(choices=CATEGORY_CHOICES)然后您需要做的就是添加'category'到 CreateView 中的字段列表中。旁注你应该probs重命名CreateView它是一个视图不是一个形式。这可能会引起混淆。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python