related_query_name和related_name
老师,我记得之前讲微博的好友关系的时候用的是related_name,现在怎么用related_query_name了,两个有什么区别
32
收起
正在回答
1回答
同学你好:
related_query_name="自定义名" #定义一个反向操作的名称,保留了反向连表操作中_set的属性。
related_name="自定义名" #定义一个反向操作的名称,直接通过自定义名即可反向操作。
related_query_name和related_name都是定义的反向操作的属性,一般常用related_name。
class Publisher(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32, unique=True) def __str__(self): return "我是一个出版社对象:{}".format(self.name) class Book(models.Model): id = models.AutoField(primary_key=True) price = models.DecimalField(max_digits=5, decimal_places=2, default=99.99) title = models.CharField(max_length=32) # 外键 publisher = models.ForeignKey( to="Publisher", on_delete=models.CASCADE, related_name="books", # related_name="books" 反向查询是用来代替基于对象查找表名(book_set)的 related_query_name="xxoo", # related_query_name="xxoo" 反向查询是用来替代基于下划线查找时的表名的 null=True )
反向查询:
基于对象查找 publisher_obj = models.Publisher.objects.first() # 找到第一个出版社对象 books = publisher_obj.book_set.all() # 找到第一个出版社出版的所有书 titles = books.values_list("title") # 找到第一个出版社出版的所有书的书名 使用基于对象查找时,前提是对象,其次,模板里的类定义不能有related_name和 related_query_name,两种方式不能并存,会报错 基于下划线查找(用到related_query_name和related_name) #反向查询id为1的publisher的title。 print(models.Publisher.objects.filter(id=1).values_list("xxoo__title")) #related_query_name #反向查询id为2的publisher的books对象。 print(models.Publisher.objects.get(id=2).books.first()) # related_neme 注意:使用related_name时,前面的还是对象,但是使用related_query_name时, 前面要是queryset(一个对象的列表) get得到的是一个模型实例对象,filter得到的是一个queryset对象。
values_list()方法返回一个包含元组的QuerySet
如果我解决了同学的问题,请采纳!学习愉快^_^。
3.从网页搭建入门Python Web
- 参与学习 人
- 提交作业 218 份
- 解答问题 3562 个
本阶段带你用Python开发一个网站,学习主流框架Django+Flask是Python Web开发的第一步,在基础知识上实现积分商城的项目开发,体验真实的项目开发流程,提高解决编程问题和效率的能力。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星