为了账号安全,请及时绑定邮箱和手机立即绑定

在 Django 中为新帖子保存 category_id

在 Django 中为新帖子保存 category_id

慕标5832272 2021-06-11 18:44:58
为博客保存/创建新帖子时遇到问题。我已经有了 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.titleclass 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.titledef 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 %}
查看完整描述

2 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

有几种方法可以实现这一点。这是最简单的:

如果您希望 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它是一个视图不是一个形式。这可能会引起混淆。


查看完整回答
反对 回复 2021-06-15
  • 2 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信