我有以下的url模式
urlpatterns = [
path('', CategoryListView.as_view(), name='forum'),
path('category/<int:pk>/', CategoryDetailView.as_view(), name='forum-detail'),
]
在CategoryDetailView中,我将列出与该类别相关的帖子。因此,当我单击任何帖子时,我想要类别内的帖子详细信息视图,因为当我使用CreateView类创建帖子时,我希望类别已经预定义。我还可以执行以下操作
path('post/<int:pk>/', ForumPostDetailView.as_view(), name='forum-post-detail'),
path('post/new/', ForumPostCreateView.as_view(), name='forum-post-create'),
]
在这种情况下,当他或她尝试创建帖子时,用户应该自己选择类别。但我希望类别已经被选择了,就像这样(我知道这是错误的)
path('category/<int:pk>/post/<int:pk>/', ForumPostDetailView.as_view(), name='forum-post-detail'),
path('category/<int:pk>/post/new/', ForumPostCreateView.as_view(), name='forum-post-create'),
]
我的视图文件和模型如下所示:
class ForumPostCreateView(CreateView):
model = PostForum
fields = ['title', 'content']
template_name = 'forum/forum_post_form.html'
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
class Category(models.Model):
image = models.ImageField(default='category.png', upload_to='category_pics')
title = models.CharField(max_length=100)
content = models.CharField(max_length=1200)
date_posted = models.DateTimeField(auto_now=True)
class PostForum(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
content = models.TextField()
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
那么该怎么做呢?现在它显示出来了
IntegrityError
null value in column "category_id" violates not-null constraint
发布于 2019-09-08 13:18:25
在urls.py中设置category.id
path('category/<int:cat_id>/post/new/', ForumPostCreateView.as_view(), name='forum-post-create')
检查它是否存在于视图中
class ForumPostCreateView(CreateView):
category = None
def despatch(self, *args, **kwargs):
super().despatch(*args, **kwargs)
if 'cat_id' in self.kwargs:
self.category = Category.objects.get(id=cat_id)
现在,您可以在初始化表单时在表单中使用它
https://stackoverflow.com/questions/57840233
复制相似问题