Ich weiß, es gibt bereits eine ähnliche question, aber ich denke, mein Fall ist ein bisschen komplizierter, weil ich einen anderen Einstiegspunkt habe.Django: prefetch_related() mit m2m durch Beziehung v2
Das sind meine Modelle:
class m_Interaction(models.Model):
fk_ip = models.ForeignKey('m_IP', related_name="interactions")
class m_User(models.Model):
name = models.CharField(max_length=200)
class m_IP(models.Model):
fk_user = models.ForeignKey('m_User', related_name="ips")
class m_Feature(models.Model):
name = models.CharField(max_length=200)
m2m_interaction = models.ManyToManyField(m_Interaction, related_name='features', through='m_Featurescore')
class m_Featurescore(models.Model):
score = models.FloatField(null=False)
fk_interaction = models.ForeignKey(m_Interaction, related_name='featurescore')
fk_feature = models.ForeignKey(m_Feature, related_name='featurescore')
ich mit m_User beginnen, folgen Sie der umgekehrte Beziehung über m_IP zu den Wechselwirkungen (m_Interaction). Dann möchte ich jeden m_Featurescore.score für jede Interaktion für eine bestimmte Instanz von m_Feature abrufen.
Meine Arbeits Abfrage Zugang zumindest alle Interaktionen in einer performanten Weise:
m_User.objects.all().prefetch_related('ips__interactions')
Aber ich kann die korrekte ‚prefetch_related'-Anweisung nicht herausfinden, die m_Featurescore.score zugreifen wie diese
db_obj_interaction.featurescore.get(fk_feature=db_obj_feature).score
ohne viele Fragen zu stellen.
Ich habe bereits versucht fast alle Kombinationen der folgenden:
'ips__interactions__features__featurescore'
Irgendwelche Vorschläge?
Wie wäre es ‚ips__interactions__featurescore‘ wie vorgeschlagen verwendet werden? Wenn Sie die Methode get() verwenden, erzwingen Sie, dass das ORM eine Abfrage erstellt. Sie müssen die all() -Methode verwenden, um den Prefetch zu nutzen. Wenn Sie eine Filterung benötigen, verwenden Sie ein Prefetch() -Objekt. – noamk
@noamk perfekt. Vielen Dank! –