是否可以使用外键模型中的模型字段和@property的组合创建django查询集?
我有以下型号:
class Person(models.Model):
firstname = models.CharField(max_length=255)
prefname = models.CharField(max_length=255,null=True,blank=True)
surname = models.CharField(max_length=255,null=True,blank=True)
def __str__(self):
return str(self.person_name) if self.person_name else ''
@property
def person_name(self):
if not self.surname:
if not self.prefname:
return self.firstname
return self.prefname
if not self.prefname:
return ''.join([self.firstname,' ', self.surname])
return ''.join([self.prefname,' ', self.surname])
class Task(models.Model):
person = models.ForeignKey(Person)
status = models.CharField(max_length=255,choices=(('OPEN','Open'),('CLOSED','Closed'))
我正在尝试使用以下命令创建一个查询集:
qs = Task.objects.all().values_list('person__person_name','status')
我在'person__person_name'上收到错误因为person_name是@property,而不是来自foreignkey模型的实际模型字段,所以它不是可用字段。
有解决方法吗?任何帮助非常感谢!
答案 0 :(得分:0)
此功能尚未在Django中实现。 Django过滤器/值在数据库级别运行,生成SQL,而property
不是DB列。
如果您的属性是一个简单的属性,则可以使用F
表达式执行此操作,如下例所示:
@property
def chairs_needed(self):
return self.num_employees - self.num_chairs
companies = Company.objects\
.annotate(chairs_needed=F('num_employees') - F('num_chairs'))\
.filter(chairs_needed__lt=4)