2017-05-22 4 views
0

Im Grunde, was ich will ist, dies zu tun:eine Variable verwenden, während eine andere Variable für ein Modell in django definieren

class A(models.Model): 
    a_number = models.FloatField() 


class B(models.Model): 
    a = models.ForeignKey(A) 
    b = models.FloatField(default=self.a.a_number) 

Ich verstehe ich nicht selbst verwenden können, während die Variablen definieren, aber gibt es eine Abhilfe für Dies? Was wäre, wenn "a_number" eine Methode anstelle einer Variablen wäre?

weiß, dass ich mir eine Methode, wie dies in B machen könnte:

def b(self): 
    return self.a.a_number 

Aber ich muß erhalte den Wert von 'a_number Recht, wie ich das Objekt in B schaffen, damit dies nicht funktionieren würde.

+1

Sie versuchen, einen Standard von einer Instanz 'a' zu setzen, die nicht existiert. –

+1

Und selbst wenn, dann würde das immer noch nicht funktionieren; Ein Standardwert wird nur angewendet, wenn die Instanz erstellt wird. Zu diesem Zeitpunkt wäre das Fremdschlüsselfeld "a" ebenfalls leer. –

Antwort

0

Implementieren Sie eine clean() method, um den Standardwert für b festzulegen.

class B(models.Model): 
    a = models.ForeignKey(A) 
    b = models.FloatField() 

    def clean(self): 
     if self.b is None: 
      self.b = self.a.a_number 

Die oben verbunden Django Dokumentation clean() als Weg schlägt automatisch einen Wert für ein Feld zur Verfügung zu stellen:

Model.clean()

Diese Methode sollte individuelle Modell verwendet werden, um Validierung und Attribute auf Ihrem Modell ändern, falls gewünscht. Zum Beispiel könnten Sie es verwenden, um automatisch einen Wert für ein Feld zur Verfügung stellen, oder Validierung zu tun, die den Zugriff auf mehr als ein einzelnes Feld erfordert:

(example omitted) 

Denken Sie daran, clean() rief vor dem Aufruf save() auf Modell. Wenn Sie die Django-Verwaltungssite verwenden, wird clean() automatisch aufgerufen, wenn ein Objekt auf dieser Site erstellt oder aktualisiert wird.

Verwandte Themen