没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
使用使用Django实现把两个模型类的数据聚合在一起实现把两个模型类的数据聚合在一起
主要介绍了使用Django实现把两个模型类的数据聚合在一起,具有很好的参考价值,希望对大家有所帮助。一起跟随小编
过来看看吧
Django中想要把模型类聚合得到想要的数据可以用F对象。
比如有模型类A和B,A和B之间有外键关联在一起,A是子表,B是父表(反过来没试过。。因为大部分数据都是用子表的,我想是可以
的),那么可以这样查:
A.objects.filter(userid=3,bookid=F(bid))
其中userid,bookid是模型类A的字段,bid是模型类B的字段。
这样操作的结果就是可以查询到userid为3且模型类A字段bookid等于模型类B字段bid的集合数据了。
F对象是可以比较两个关联模型类的字段数据的。
我看到网上有说F对象可以这样用F('b__id') ==>F('模型类名小写__字段名'),此处是双下划线。
但是我用Django2.0时会报错。。真是搞不懂,后来我直接使用字段名居然可以,醉了。
反正都可以试试吧
A.objects.filter(userid=3,bookid=F(bid))
A.objects.filter(userid=3,bookid=F('b__bid'))
补充知识:补充知识:Django Admin页面显示父表页面显示父表,编辑子表编辑子表
默认情况下,ModelAdmin只允许您管理模型“本身”字段,而不是相关模型.以下方法将实现,在应用类的列表管理显示页面,显示父表的字段;在
编辑页面,父表对子表进行编辑.
models.py如下
class Level(models.Model):
# l_num = models.IntegerField(default=0, verbose_name='序号')
name = models.CharField(max_length=20)
is_delete = models.BooleanField(default=False)
def __str__(self):
return self.name
class Grades(models.Model):
name = models.CharField(max_length=20, verbose_name='班级')
# 外键,这里关联模型Level与模型名称一样,不是全小写。
level = models.ForeignKey('Level', on_delete=models.DO_NOTHING)
is_delete = models.BooleanField(default=False)
def __str__(self):
return '%s%s' % (self.level, self.name)
class Students(models.Model):
name = models.CharField(max_length=20, db_index=True, verbose_name='姓名')
age = models.IntegerField(verbose_name='年龄')
# 需要先提供一个二维的二元元组,第一个元素表示存在数据库内真实的值,第二个表示页面上显示的具体内容
SEX_CHOICE = (
('男', '男'),
('女', '女'),
)
sex = models.CharField(max_length=10, choices=SEX_CHOICE, verbose_name='性别', default='男')
grade = models.ForeignKey('Grades', on_delete=models.DO_NOTHING, verbose_name="班级")
img_student = models.ImageField(upload_to='img_student', default='img_student/default.png', verbose_name='头像')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
last_update_time = models.DateTimeField(auto_now=True, verbose_name='上次更新时间')
is_delete = models.BooleanField(default=False)
def __str__(self):
return self.name
在admin.py代码如下:
@admin.register(Students)
class StudentsAdmin(admin.ModelAdmin):
list_display = ('name', 'age', 'sex', 'grade', 'create_time', 'last_update_time', 'is_delete')
做完之后,显示的效果如下:
资源评论
weixin_38668335
- 粉丝: 7
- 资源: 938
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功