django app的正确模型结构?

时间:2014-11-29 19:55:26

标签: python django

我有一个博客应用程序,包含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没有部门属性,这是我得到的错误,但我猜测有一种方法可以实现这一点,我只是不知道它是什么是

一如既往地感谢您的帮助。如果有任何不清楚的地方,请告诉我。

1 个答案:

答案 0 :(得分:1)

Post模型没有department属性的事实应该给你一个结论错误的线索:它显然需要一个。问题是你的ForeignKey是错误的方式:FK是一对多的关系,并且生活在&#34;很多&#34;在你的情况下,邮政,指向&#34;一个&#34;,即部门。

然后您的视图代码将完全按原样运行,并且您可以使用my_department.post_set.all()检索部门的所有帖子。