Django ManyToManyField 跨越中间表查询的方法
本文介绍如何在Django中利用ManyToManyField自动生成的中间表进行数据查询。通过Article模型中的column字段,可以直接使用filter方法按栏目ID获取对应文章列表,无需手动操作中间表。
在Django模型中,使用ManyToManyField会自动生成一个中间表,例如本例中的pyclub_article_column。
from django.db import models # Create your models here. class Column(models.Model): id = models.AutoField(u'序号',primary_key=True,auto_created=True) name = models.CharField(u'名字',max_length=100) published = models.DateField(u'发布时间',auto_now_add=True) def __str__(self): return self.name class Meta: verbose_name = '栏目' verbose_name_plural = '栏目列表' ordering = ['id'] # 按照哪个栏目排序 class Article(models.Model): id = models.AutoField(u'序号',primary_key=True,auto_created=True) title = models.CharField(u'标题',max_length=100,default='') content = models.TextField(u'内容',default='') column = models.ManyToManyField(Column,verbose_name='归属栏目') published = models.DateField(u'发布时间',auto_now_add=True,null=True) def __str__(self): return self.title class Meta: verbose_name = '文章' verbose_name_plural = '文章列表' ordering = ['id'] # 按照哪个文章排序
该中间表pyclub_article_column的结构如下: | id | article_id | column_id | |-----|------------|-----------| | 370 | 411 | 146 | | 371 | 412 | 146 | | 372 | 413 | 165 | | 373 | 414 | 158 | | 374 | 415 | 151 |
+-----+------------+-----------+ | id | article_id | column_id | +-----+------------+-----------+ | 370 | 411 | 146 | | 371 | 412 | 146 | | 372 | 413 | 165 | | 373 | 414 | 158 | | 374 | 415 | 151 |
我的目标是通过column_id获取对应栏目下的所有文章列表。之前一直困惑于如何直接操作中间表,现在发现可以直接将结果集column作为对象处理,问题便简化了。
list_info = Article.objects.filter(column=id)
尽管Article表中没有直接存储column字段,但在Django的model.py中通过ManyToManyField建立了关联关系。因此,在view.py中,可以通过Article.objects直接使用filter方法进行类别查询。
以上即为Django ManyToManyField跨越中间表查询的完整方法,希望能对大家有所帮助。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













