2017-08-02 1 views
0

Ich habe ein Modell, das etwas wie folgt aussieht:Überschreiben Sie einen Django-Modell-Standardwert im Standardformular?

class DooDad(models.Model): 
    doo_dad_dogue = models.BooleanField(default=True) 

Das Problem ist, dass standardmäßig von ... Sachen manipuliert werden muss, die auf diese Frage irrelevant ist. Wenn ich das Formular erstellen würde, das das Objekt erstellt, wäre die Lösung trivial. Ich benutze immer noch das Django-Standardformular für die Erstellung dieser Dinge, und ich würde es lieber so behalten.

habe ich versucht, das Offensichtliche:

class DooDad(models.Model): 
    doo_dad_dogue = models.BooleanField(default=True) 

    def __init__(self, *args, **kwargs): 
     super(DooDad, self).__init__(*args, **kwargs) 
     self.doo_dad_dogue = False 

..., die ich vermute, schreckliche Nebenwirkungen haben würde, war aber mit wert zu experimentieren. Das Formular erscheint immer noch mit der Checkbox.

EDIT: ich erwähnt habe, sollte, dass diese Django 1,9

Wenn es nicht möglich ist, mit dem Standard-Modellerstellung, um fortzufahren, ist es nichts Ungewöhnliches, dass ich tun müssen, um zu einer Modelform, die nur Auswirkungen CREATE, und nicht EDIT?

Antwort

0

Ich glaube nicht, dass die Verwendung des __init__in-Modells eine gute Übung ist. Wenn Sie jedoch versuchen möchten, ist es wichtig zu wissen, dass Ihr Code nicht korrekt ist. Das Feld doo_dad_dogue ist ein Deskriptor. Der korrekte Zugang ist mit self.fields['doo_dad_dogue'] = False.

Die Verwendung eines Formulars ist der richtige Weg. Sie können den Standardwert in Form außer Kraft setzen, indem Sie die init Methode:

def __init__(self, *args, **kwargs): 
    super(<YOUR_FORM>, self).__init__(*args, **kwargs) 
    if args is not None and len(args) and args[0] is not None: 
     <MANIPULATE HERE> 

Hoffnung, das hilft.

Verwandte Themen