Article
ForeignKey和ManyToManyField
class User(models.Model):
SEX_CHOICE = (('M','male'), ('F','female'),)
username = models.CharField('用户名',primary_key=True, max_length=30)
password = models.CharField('密码',max_length=30)
sex = models.CharField('性别',max_length=10,choices=SEX_CHOICE)
class Article(models.Model):
content = models.TextField(null=True, blank=True)
user = models.ForeignKey(User,on_delete=models.CASCADE, related_name='article')
class Comment(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='comment')
article = models.ManyToManyField(Article, related_name='comment')
content = models.TextField()
ForeignKey(多对一)
使用:
#创建含ForeignKey对象:
user = User.objects.get(username="mandajc666") #get使用时最好用try?到时候查查ifairy2
article = Article.objects.create(user=user, content="test")
ForeignKey在插入数据时要将外键属性作为属性之一,如user
#以下是创建后数据库的结果:
id content user_id
7 test mandajc666
#以下是相关操作
article.user #获取关联用户对象
Out[7]: <User: User object (mandajc666)>
article.user.pk #获取关联用户对象的属性值
Out[10]: 'mandajc666'
ManyToManyField(多对多)
使用:
#创建含ManyToManyField对象:
article = Article.objects.create(user=user, content="test")
comment = Comment.objects.create(user=user,content="testtest")
article.comment.add(comment) #或comment.article.add(article)
ManyToManyField在插入数据时不能将该属性作为声明属性之一,因为数据表中根本没有这一列,django是在数据库中新建一个表“模块名_comment_article”来替代这一列,所以article.comment.add(...)的comment是models中定义的related_name(反向),同理,comment.article.add(...)的article就是Comment中的属性值article
#以下是创建后article_comment_article的结果:
id comment_id article_id
2 2 7
#以下是相关操作
article.comment.filter(user_id="mandajc666") #正常增删改查,和前面外键article.user一样,获取的是对象,然后通过.访问它们的属性值
Out[18]: <QuerySet [<Comment: Comment object (2)>]>
comment.article.filter(user_id="mandajc666") #反向查询
Out[19]: <QuerySet [<Article: Article object (7)>]>
网友评论