【发布时间】:2015-08-22 17:37:44
【问题描述】:
我有两个 Django 模型,我想在它们中都有相同的值字段。基本上,当CarModification.engine_status 是'inactive' 或'active' 时,我希望将Car 中的相同字段设置为最新的CarModification 字段值。
class CarManager(models.Manager):
def get_queryset(self):
# Select engine_status from the latest
# carmodification. If there are no modifications,
# use default 'inactive'
return super(CarManager, self).get_queryset().extra(
select={
'engine_status': "SELECT COALESCE ( "
" (SELECT engine_status "
" FROM carmodifications "
" WHERE cars.id = carmodifications.car_id "
" ORDER BY carmodifications.created_at DESC "
" LIMIT 1), 'inactive')"
)
class Car(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
objects = CarManager()
class CarModification(models.Model):
CHOICES = (
('active', 'Active')
('inactive', 'Inactive')
)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
comment = models.CharField()
engine_status = models.CharField(default='inactive', choices=CHOICES)
car = models.ForeignKey(Car, related_name='modifications')
这很好用,但我还希望能够通过这个额外的字段过滤 Car 对象。这可以通过更多的 SQL 查询来实现,但它变得(而且我认为它已经是)非常难看。有没有办法使用 Django ORM 完成相同但更简洁的方法?
【问题讨论】:
标签: python django orm django-orm