Ich habe zwei ModelleDjango kommen wie Abfragen
class A(models.Model):
id = PGUUIDField(primary_key=True)
name = CharField(max_length=32)
prefix = CharField(max_length=64)
controller = models.ForeignKey(Controller)
location = models.ForeignKey(B, related_name="blink")
class B(models.Model):
id = PGUUIDField(primary_key=True)
name = CharField(max_length=128)
Die Tabelle für A enthält viele A-Objekte und die Tabelle für B enthält viele B-Objekte.
raw sql Ich kann ...
SELECT b.* FROM B AS b
JOIN A AS a
ON b.id = a.location_id
Und ich bekomme eine Liste aller Objekte, die B A einen Fremdschlüssel hat.
Aber ich kann nicht für das Leben von mir herausfinden, wie man das mit reinem Django macht. Können Sie mir bitte sagen, wie?
Ich habe select_related nachgeschlagen und es versucht, aber ich muss etwas falsch machen. Ich erhalte eine queryset von A-Objekte
Derzeit die mit folgenden:
queryset2 = []
try:
qs = A.objects.all().values('location_id')
queryset2 = B.objects.filter(id__in=qs)
print queryset2
self.fields['location'].queryset = queryset2
Dies wird in [Teil 2 des Lernprogramms] (https://docs.djangoproject.com/en/1.9/intro/tutorial02/) behandelt. –
queryset2 = B.objects.filter (id = a__location_id) --returns --globaler Name 'a__location_id' ist nicht definiert ()
Ich nehme an, Sie haben auf diesen "Choice.objects.filter" Bezug genommen (question__pub_date__year = current_year) "im Tutorial –
Nein, ich beziehe mich nicht darauf. Sie tun auch nicht, was sie im Tutorial tun. Beachten Sie, dass die Syntax für den doppelten Unterstrich für den _name des Arguments_ und nicht für das Argument selbst gilt. Aus diesem Grund erhalten Sie einen Namensfehler, weil Sie auf eine Variable namens "a__location_id" verweisen, die Sie nie definiert haben. –