我有两个模型,一个ForeignKey
我正在尝试匹配。为了做到这一点,我正在按特定的数字和日期查找第二个模型。问题是它有两个日期,我必须决定选择哪个日期。在某些情况下,它被设置为NULL,在某些情况下它不是。如果是的话我必须得到第二个日期字段。我有这样的事情:
class MyModel1(models.Model):
model2_key = models.ForeignKey(MyModel2)
model1_date=...
model1_number=...
第二种模式:
class MyModel2(models.Model):
model2_date1=...
model2_date2=...
model2_number=...
现在,如何做出选择?我查找了有关F expressions
,Q expressions
,When expressions
,Select
的文档,我有点困惑。如何判断返回搜索到的MyModel2
对象的函数?我有类似的东西,但它不起作用。
def _find_model2(searched_date, searched_number):
searched_model2=MyModel2.objects.get(Q(model2_number=searched_number),
Q(When(model2_date1__e='NULL', then=model2_date2) |
Q(When(model2_date1__ne='NULL', then=model2_date1))=searched_date))
我对django很新,所以任何帮助都会受到赞赏。
答案 0 :(得分:0)
我已经解决了这个问题,我不认为这是一个非常高效和优雅的问题,但它确实有效。如果有人有更好的解决方案,请发布。
首先,调用相应日期匹配的所有对象:
from_query = list(MyModel2.objects.filter(Q(model2_date1__range=
(datetime_min, datetime_max)) | Q(model2_date2__range=(datetime_min, datetime_max)),
model2_number=searched_number))
然后我迭代找到的对象:
to_return = []
for item in from_query:
if item.model2_date1:
to_return.append(item)
elif datetime_min <= item.model2_date2 <= datetime_max:
to_return.append(item)
编辑:我想出了一个解决方案。确保model2_date1__isnull=True
足够。解决方案现在看起来像这样:
from_query = list(MyModel2.objects.get((Q(model2_date1__range=(datetime_min, datetime_max)) |
Q(Q(model2_date2__range=(datetime_min, datetime_max)),
Q(model2_date1__isnull=True)),
model2_number=searched_number))