为博客保存/创建新帖子时遇到问题。我已经有了 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它是一个视图不是一个形式。这可能会引起混淆。
添加回答
举报
0/150
提交
取消