可以使用F()来在等号右边引用对象查询中的字段,但是此时似乎不能用使用startswith,contains等关联词,但是可以用__lt,__lte,__gt,__gte等。
from django.db.models import F;
print(Catalog.objects.filter(count__lte=F('target')))
思考:这里在等号的右边不能使用“xx__xxx__xxx”这样的方式来表示对象的对应属性,应为在等号左边python当成是局部变量的定义,所以怎么写都没有关系。是如果在等号右边,要嘛是一个已定义变量,要嘛是一个数值或字符串。当然也不能使用字符串来表示对象的属性,因为会于字符串作为比较表达式的情况出现语言混乱,所以django才增加了一个叫做F()的类,解决这样的问题。
但是,在过滤器和排除子句中的 F() 对象不同,在使用 F() 对象更新时不能 引入联合。你只能引用被更新模型本身的字段。否则会引发一个 FieldError。