这是一个奇怪的问题,很抱歉提前。我在Django的楷模,看起来像这样:Django过滤属性有两个值,更喜欢一个的结果
class BaseModel(models.Model):
created_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
class Foo(BaseModel):
barId = models.ForeignKey(Bar, unique=False)
fizzId = models.ForeignKey(Fizz, unique=False)
buzzId = models.IntegerField(unique=False)
value = models.TextField()
而且我有一个需要返回具有给定{request_barId,request_buzzId,LASTUPDATEDATE}所有FOOS列表的视图集。这是相当直接的,
foobar = Foo.objects.filter(
buzzId=request_buzzId,
modified_date__gt=request_lastUpdateDate,
barId=request_barId)
这是蹭。 buzzId的缺省值是指定buzzId需要覆盖的基本列表,替换基本列表上的实例。这就是我有点失落的地方。我有一个解决方案,但我觉得它不是特别优雅,而且有一种方法可以做到这一点。这里是我的代码做覆盖:
base_foobar = Foo.objects.filter(
buzzId=base_buzzId,
modified_date__gt=request_lastUpdateDate,
barId=request_barId).exclude(
fizzId__in=[o.fizzId for o in foobar])
result = foobar | base_foobar
而这看起来真的很junky。有没有办法清除它?
编辑:为了澄清,让我们假设元组{1,0,'01 - 01-1970'}的列表表示基本集合(buzzId:0),并返回包含fizzIds {1 ,2,3,10}。假设元组{1,1,'01 -01-1970'}表示buzzId对一组完整字符串的请求。如果说,我们的1 buzzId(称之为扩充)已经匹配FOOS与fizzIds {2,10,15,20},然后我们的结果集应该像
{ (base) 1, (augment) 2, (base) 3, (augment) 10, (augment) 15, (augment) 20 }
这是否清晰起来?
您能否详细说明并更新您的问题: “buzzId有一个默认值,它是指定buzzId需要覆盖的基本列表,替换基本列表上的实例。” –
@DhruvBaveja更新。 – Duckies