在过去的七天里,我正在尝试使用django构建一个博客,我为我的博客找到了如下模型
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
body = models.TextField()
created_at = models.DateTimeField('created date', auto_now_add=True, auto_now=False)
updated_at = models.DateTimeField('updated date', auto_now_add=False, auto_now=True)
def __str__(self):
return self.title
class Author(models.Model):
name = models.CharField(max_length=150)
email = models.EmailField(blank=True)
bio = models.TextField()
#This line define many author can have a post
#but I want manypost can only have single author.
#in my view to accomplish this i need to define author in Post class
#on defining author=ForeignKey(Author) in post, It throws an error Author is not defined
post = models.ForeignKey(Post)
def __str__(self):
return self.author
class Category(models.Model):
cat_name = models.CharField(max_length=200)
post = models.ManyToManyField(Post)
def __str__(self):
return self.cat_name
我很困惑的是帖子,类别,作者和标签之间的关系。
关系我想要设置的是
但我上面创建的模型并没有像我预期的那样工作(我很困惑)。
当我把作者字段放在Post Class中,这样我会成为一个关系,作者可以有很多帖子,但我得到错误作者没有定义。(因为我知道解释器运行代码从顶部到底部)。我该如何完成
答案 0 :(得分:1)
您有两种选择:
author= models.ForeignKey("Author")
通过这种方式,Django将等到所有模型加载然后解析依赖关系。
答案 1 :(得分:0)
尝试模型结构语法:
class Author(models.Model):
name = models.CharField(max_length=150)
email = models.EmailField(blank=True)
bio = models.TextField()
def __str__(self):
return self.author
class Post(models.Model):
author = models.ForeignKey(Author)
title = models.CharField(max_length=200)
body = models.TextField()
created_at = models.DateTimeField('created date', auto_now_add=True, auto_now=False)
updated_at = models.DateTimeField('updated date', auto_now_add=False, auto_now=True)
def __str__(self):
return self.title
class Category(models.Model):
cat_name = models.CharField(max_length=200)
post = models.ManyToManyField(Post)
def __str__(self):
return self.cat_name
class Tag(models.Model):
tag_name = models.CharField(max_length=200)
post = models.ManyToManyField(Post)
def __str__(self):
return self.tag_name
这将解决您的三个要求:
1.)作者可以有很多帖子,因为我将Post Model设置为一对多字段
2.)类别可以有很多帖子,反之亦然(这已根据你的代码设置)
3.)标签可以有很多帖子,反之亦然(非常类似于你已经制作的类别模型,我在两者之间创建了多对多的字段)
您收到错误的原因是因为您让作者根据您的模型结构发布了多对一关系(一个帖子中的许多作者)的关系
现在测试它只需迁移所有这些更改并在管理页面中快速测试
答案 2 :(得分:0)
- 作者可以有很多帖子,帖子只能有单个作者
醇>
Post
模型应该ForeignKey
指向Author
。
class Post(...):
author = models.ForeignKey('Author')
- 类别可以有很多帖子,帖子可以有很多类别
醇>
Post
模型应该ManyToManyField
指向Category
。
class Post(...):
category = models.ManyToManyField('Category')
- 一个标签可以有很多帖子,帖子可以有很多标签
醇>
与数字2相同。