我有一个模型如下:
class ModelA(models.Model):
id = models.CharField()
class ModelB(models.Model):
name = models.CharField()
base = models.Boolean(default=False)
modela = models.ForeignKey(ModelA)在ModelB中,我们有如下记录:
id name base modela
------------------------------------------------
1 solution_base True X2ZQ
2 solution_x False X2ZQ
3 solution_base True ALSB
4 solution_z False ALSB
5 solution_base True 5YET
6 solution_c False 5YET
7 solution_base True PIAT
... ... ... ...如您所见,每条记录都有自己的基本副本,可以通过惟一的模型-- foreignkey来区分。我所需要的是,通过给定的正常解决方案id(例如solution_x),我需要查询它的基本等效基对象(其中模型id是相同的)。到目前为止,我所做的是:
modela_id = ModelB.objects.filter(id=modelb_pk).select_related('modela_id').values_list('modela_id', flat=True)
modelb_solution_base_id = ModelB.objects.filter(modela_id=modela_id[0]).filter(base=True).select_related('modela_id').values_list('id', flat=True)我想应该有一个使用prefetch_related(Prefetch())合并这两者的解决方案,但我不知道如何使用。任何帮助都将不胜感激。
发布于 2022-09-11 23:31:57
我认为你让这件事变得更复杂了-- Django ORM为你处理了很多事情,这要归功于外键关系。给定ModelB的ID,另一个ModelB的ID具有相同的ModelA,但base=True只是:
ModelB.objects.get(id=modelb_pk).modela.modelb_set.get(base=True).id为什么要这么做?
因为ModelA.
.modela以获得对应的ModelA实例,调用.modelb_set返回与ModelA相关的所有ModelB记录。
ModelB.objects.
那样在modelb_set上调用.get/.filter
https://stackoverflow.com/questions/73682327
复制相似问题