Ich habe eine Methode has_related_object
in meinem Modell, die überprüfen muss, ob ein verwandtes Objekt vorhanden ist
class Business(base):
name = models.CharField(max_length=100, blank=True, null=True)
def has_related_object(self):
return (self.customers is not None) and (self.car is not None)
class Customer(base):
name = models.CharField(max_length=100, blank=True, null=True)
person = models.OneToOneField('Business', related_name="customer")
Aber ich bekomme den Fehler:
Business.has_related_object ()
RelatedObjectDoesNotExist: Unternehmen hat keinen Kunden.
Antworten:
Dies liegt daran, dass der ORM in die Datenbank gehen muss, um zu überprüfen, ob er
customer
vorhanden ist. Da es nicht existiert, wird eine Ausnahme ausgelöst.Sie müssen Ihre Methode wie folgt ändern:
def has_related_object(self): has_customer = False try: has_customer = (self.customers is not None) except Customer.DoesNotExist: pass return has_customer and (self.car is not None)
Ich kenne die Situation nicht,
self.car
also überlasse ich es Ihnen, sie anzupassen, wenn es nötig ist.Randnotiz: Wenn Sie dies auf einem
Model
mitForeignKeyField
oderOneToOneField
tun würden, könnten Sie Folgendes als Verknüpfung ausführen, um die Datenbankabfrage zu vermeiden.def has_business(self): return self.business_id is not None
quelle
None
wenn Sie versuchen, ein Objekt nach einer seiner Beziehungen abzufragen? Eine Ausnahme auszulösen scheint übertrieben.Verwenden Sie
hasattr(self, 'customers')
diese Option , um die in Django-Dokumenten empfohlene Ausnahmeprüfung zu vermeiden :def has_related_object(self): return hasattr(self, 'customers') and self.car is not None
quelle