Ich habe ein einfaches Relation-Modell, wo ein Benutzer ein Tag genau wie stackoverflow folgen kann.Query intermediate durch Felder in Django
class Relation(models.Model):
user = AutoOneToOneField(User)
follows_tag = models.ManyToManyField(Tag, blank=True, null=True, through='TagRelation')
class TagRelation(models.Model):
user = models.ForeignKey(Relation, on_delete=models.CASCADE)
following_tag = models.ForeignKey(Tag, on_delete=models.CASCADE)
pub_date = models.DateTimeField(default=timezone.now)
class Meta:
unique_together = ['user', 'following_tag']
nun die Ergebnisse aller Tags erhalten ein Benutzer folgt:
kakar = CustomUser.objects.get(email="[email protected]")
tags_following = kakar.relation.follows_tag.all()
Das ist in Ordnung.
Aber um auf Zwischenfelder zuzugreifen, muss ich eine große Liste von anderen Abfragen durchlaufen. Angenommen, ich angezeigt werden soll, wenn der Benutzer begonnen, einen Tag folgt, werde ich habe, so etwas zu tun:
kakar = CustomUser.objects.get(email="[email protected]")
kakar_relation = Relation.objects.get(user=kakar)
t1 = kakar.relation.follows_tag.all()[0]
kakar_t1_relation = TagRelation.objects.get(user=kakar_relation, following_tag=t1)
kakar_t1_relation.pub_date
Wie Sie sehen können, nur das Datum bekommt ich so viel durch Abfrage gehen. Ist dies der einzige Weg, um Zwischenwerte zu erhalten, oder kann dies optimiert werden? Ich bin mir auch nicht sicher, ob dieses Modell Design ist der Weg zu gehen, also wenn Sie irgendwelche Empfehlungen oder Ratschläge hätte, wäre ich sehr dankbar. Vielen Dank.