Ich möchte in der Lage sein zu überprüfen, ob ein verwandtes Objekt bereits mit select_related
oder prefetch_related
abgerufen wurde, so dass ich die Daten entsprechend serialisieren kann. Hier ein Beispiel:Gibt es eine Möglichkeit zu überprüfen, ob ein verwandtes Objekt bereits abgerufen wurde?
class Address(models.Model):
street = models.CharField(max_length=100)
zip = models.CharField(max_length=10)
class Person(models.Model):
name = models.CharField(max_length=20)
address = models.ForeignKey(Address)
def serialize_address(address):
return {
"id": address.id,
"street": address.street,
"zip": address.zip
}
def serialize_person(person):
result = {
"id": person.id,
"name": person.name
}
if is_fetched(person.address):
result["address"] = serialize_address(person.address)
else:
result["address"] = None
######
person_a = Person.objects.select_related("address").get(id=1)
person_b = Person.objects.get(id=2)
serialize_person(person_a) #should be object with id, name and address
serialize_person(person_b) #should be object with only id and name
In diesem Beispiel wird die Funktion is_fetched
ist das, was ich suche. Ich möchte feststellen, ob das Personenobjekt bereits eine Adresse aufgelöst hat und nur wenn es vorhanden ist, sollte es auch serialisiert werden. Wenn dies nicht der Fall ist, sollte keine weitere Datenbankabfrage ausgeführt werden.
Gibt es einen Weg, dies in Django zu erreichen?
Danke, das klingt vielversprechend. Funktioniert es auch für ManyToMany-Beziehungen oder Reverse ForeignKey-Beziehungen? Zum Beispiel: '_topping_set_cache'? – basilikum