我有一个博客应用程序,包含3个模型:department, author, post
我无法正确构建模型并创建相应的表单
models.py
from django.db import models
class Department(models.Model):
name=models.CharField(max_length=20)
posts = models.ForeignKey('Post')
authors = models.ManyToManyField('Author')
def __unicode__(self):
return self.name
class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
post = models.ForeignKey('Post')
def __unicode__(self):
return self.last_name
class Post(models.Model):
title=models.CharField(max_length=20)
post = models.TextField()
creation_date = models.DateField(auto_now_add=True)
def __unicode__(self):
return self.title
这个想法是一个部门可以有很多帖子,但每个帖子只属于一个部门。一个部门也可以由多个作者组成,作者可以在多个部门。我真正遇到麻烦的地方就是表格。
相关urls.py
看起来像这样:
url(r'^(?P<department_id>\d+)/posts/$', views.posts, name='posts'),
url(r'^(?P<department_id>\d+)/add_post/$', views.add_post, name="add_post"),
所以我可以按部门提取所有帖子。表单的目标是识别部门ID并自动添加到帖子中。
def add_post(request, department_id):
department = Department.objects.get(pk=department_id)
if request.method == 'POST':
new_post_form = PostForm(data=request.POST)
if new_post_form.is_valid():
new_post = new_post_form.save(commit=False)
new_post.department = department
new_post.save()
return redirect('posts', department_id=department_id)
现在我意识到Post model
没有部门属性,这是我得到的错误,但我猜测有一种方法可以实现这一点,我只是不知道它是什么是
一如既往地感谢您的帮助。如果有任何不清楚的地方,请告诉我。
答案 0 :(得分:1)
Post模型没有department属性的事实应该给你一个结论错误的线索:它显然需要一个。问题是你的ForeignKey是错误的方式:FK是一对多的关系,并且生活在&#34;很多&#34;在你的情况下,邮政,指向&#34;一个&#34;,即部门。
然后您的视图代码将完全按原样运行,并且您可以使用my_department.post_set.all()
检索部门的所有帖子。