多对多关系
在models.py中添加新闻
类,新闻类型
类。新闻有多种类型,某种类型有多条新闻。
#新闻类型 类
class TypeInfo(models.Model):
tname = models.CharField(max_length=20)
#新闻 类
class NewsInfo(models.Model):
ntitle = models.CharField(max_length=20)
ncontent =models.TextField()
ndate = models.DateField(auto_now_add=True) #创建时设置为当前时间,可以被修改
#通过ManyToManyField()建立TypeInfo和 NewsInfo 之间多对多的关系。
newstype = models.ManyToManyField('TypeInfo')
这个类中属性多,所以在这个类中添加多对多的关系。
这个类似于外键的东西,最好命名时有两种类的影子。
之后生成迁移文件,然后执行迁移。
此时,在数据库中多了三个表,分别是新闻类的表app_typeinfo
,新闻表app_newsinfo
,和关系表app_newsinfo_newstype
,app_newsinfo_newstype的表结构为:id,newsinfo_id(关联app_newsinfo表)和typeinfo_id(关联app_typeinfo表)都是自动创建的
多对多的查询
可以把多到多
的查询看作是一到多
的查询:
如果查询非常的复杂,那么我们还可以是使用原生的sql语句进行查询:
语法格式为 list = 模型类.objects.raw(``` 原生的sql语句 ```,params=None,translations=None) ,
返回值是RawquerySet类型,然后for遍历lsit取值。
-----这个模型类NewsInfo或者TypeInfo都可以。
- list = NewsInfo.objects.raw(
select *...
)
自连接
如何让自己连接自己,这是我们将上一级的id定义为外键: parentid = models.ForeignKey('self', null=True, blank=True)
- self表示自己连接自己,null和blank必须为True。因为上一级可以为空。
网友评论