我Session
由Phrase
Phrase
组成,每个Mot
由ordre
按特殊顺序通过字段class Phrase(models.Model):
description = models.CharField(max_length=150)
class Mot(models.Model):
description = models.CharField(max_length=150)
class Session(BaseModel):
pass
class SessionPhrase(models.Model):
session = models.ForeignKey(Session)
phrase = models.ForeignKey(Phrase)
class SessionPhraseMot(models.Model):
session_phrase = models.ForeignKey(SessionPhrase)
mot = models.ForeignKey(Mot)
ordre = models.IntegerField(blank=False)
组成,如下所示:
Session
我有一个Mot
通用详细信息视图,我希望通过Phrase
显示当前会话的self.object
的所有sp = SessionPhrase.objects.filter(session=self.object)
。
我试着从类似的东西开始:
{{1}}
但现在我被卡住了......知道如何做到这一点?
答案 0 :(得分:0)
我似乎找到了它,但我不知道它是否是最干净的&正确的方法:
sps = SessionPhrase.objects.filter(session=self.object)
result = [SessionPhraseMot.objects
.filter(session_phrase=sp)
.order_by('ordre') for sp in sps]
答案 1 :(得分:0)
您的解决方案会导致每个SessionPhrase
对象的其他数据库查询,这可能会导致性能下降,具体取决于您的数据库的大小。
按spanning relationships只需要一个查询:
session_phrase_mots = SessionPhraseMot.objects.filter(session_phrase__session=self.object).order_by('ordre')
您通常从您想要拥有的对象类型开始(在这种情况下,它是SessionPhraseMot
)。例如,如果您想要与当前会话相关的所有Mot
个对象,您可以这样做:
mots = Mot.objects.filter(sessionphrasemot_set__session_phrase__session=self.object)