Lassen Sie uns sagen, ich habe diese Modelle:Django 1.4: ein Feld in einem Fremdschlüssel Objekt (null = True) Erhalten, erhalten keine oder Feldwert
class A(models.Model):
name = models.CharField(max_length=32)
b = models.ForeignKey("B", null=True)
def __unicode__(self):
return self.name
class B(models.Model):
name = models.CharField(max_length=32)
def __unicode__(self):
return self.name
Und diese Ansicht:
def DisplayIt(request):
html = ""
for a in A.objects.all():
html += "<input type='text' value='" + a.b.name + "' />"
Dies funktioniert gut, solange jedes A einen Verweis auf ein B in Feld b hat. Aber ich habe null = True auf dem Referenzfeld b. Wenn b None ist, wird eine Ausnahme ausgelöst, dass NoneType keinen Funktionsnamen hat, was vollständig erwartet wird.
Natürlich, ich kann dies tun:
def DisplayIt(request):
somestring = ""
for a in A.objects.all():
if a.b is not None:
somestring += a.b.name
ABER, ich will nicht, dies zu tun, wenn ich nicht haben. Also, gibt es eine Möglichkeit, b.name oder None zu erhalten, wenn b None ist, OHNE eine if a.b is not None:
in jede Schleife zu setzen? Mein Beispiel aus der realen Welt ist viel komplexer, und ich erstelle ein temporäres Objekt zur Anzeige aus tatsächlichen Datenbankfeldern ... es genügt zu sagen, dass ich nicht alle diese if-Anweisungen hätte und nicht sicher war, ob es da ist war eine andere eingebaute Funktion, um dorthin zu gelangen. Ich könnte auch eine Klassenmethode erstellen, um jedes dieser fremden Felder zu erhalten, wenn sie existieren, oder leer, wenn sie das nicht tun, aber ich bin mir nicht sicher, ob das auch der beste Weg ist.
Ich erwähnte dies in meiner Antwort, aber hören Sie auf, HTML in der Ansicht durch Verketten von Zeichenfolgen zu erstellen, und verwenden Sie die Vorlagenfunktion. –