/ / Django: Verwenden Sie das Widget, um die Auswahl in einer ModelForm zu beschränken - Django, Formulare, Widget

Django: Verwenden Sie das Widget, um die Auswahlmöglichkeiten in einem ModelForm - django, forms, widget einzuschränken

Mein Modellformular erbt vom Subsystemformular. Ich möchte die Auswahlmöglichkeiten für den Benutzer im Formular einschränken. (besonders der Name) Ich weiß, ich muss Widgets verwenden. Aber es funktioniert nicht.

Ich muss SubsytemForm verwenden.

SUBSYSTEM_CHOICES = (a1,a2,a3)
Class Subsystem(models.Model):
name = models.CharField("Name", max_length=20)


class SubsytemForm(forms.ModelForm):
class Meta:
model = Subsystem
widgets = {
"name": ChoiceField(widget=RadioSelect, choices=SUBSYSTEM_CHOICES)
}

Antworten:

5 für die Antwort № 1

Von Dokumentation der Django-Modellformulare:

Wenn Sie ein Formularfeld explizit instantiieren, wiedies geht Django voraus dass Sie sein Verhalten vollständig definieren möchten; daher default Attribute (wie max_length oder required) werden nicht aus dem entsprechendes Modell. Wenn Sie das in angegebene Verhalten beibehalten möchten Im Modell müssen Sie die relevanten Argumente explizit festlegen, wenn das Formularfeld deklarieren.

Sie können versuchen mit:

class SubsytemForm(forms.ModelForm):
name =  forms.ChoiceField(widget=RadioSelect, choices= choices )
class Meta:
model = Subsystem

Du kannst auch

class SubsytemForm(forms.ModelForm):
class Meta:
model = Subsystem
def __init__(self, *args, **kwargs):
self.name_choices = kwargs.pop("name_choices", None)
super(SubsytemForm,self).__init__(*args,**kwargs)
self.fields["name"].queryset= self.name_choices

und senden name_choices als Parameter in SubsytemForm Schaffung. Denken Sie daran, dass Auswahlmöglichkeiten ein Abfragesatz sein sollten.

Sie sollten auch lesen Wie kann ich ForeignKey-Optionen in einer Django ModelForm filtern?


3 für die Antwort № 2

SUBSYSTEM_CHOICES ist kein gültiger Wert für choices Attribut, weil es keine Schlüssel / Wert-Paare hat. Sie brauchen etwas wie:

SUBSYSTEM_CHOICES = (
(a1, "a1 Display"),
(a2, "a2 Display"),
(a3, "a3 Display"),
)