Ich habe ein Modell mit einigen Feldern. Betrachten Sie das folgende Modell.Nur Feldwert von einem Klassenformular in Django anzeigen
class Item(models.Model):
a = models.CharField(max_length=200)
b = models.BooleanField(default=False)
c = models.CharField(max_length=200)
Eine Formularklasse für das entsprechende Modell.
class ItemForm(ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
class Meta:
model = Item
localized_fields = '__all__'
fields = [
'a',
'b',
'c',
]
Und eine Ansicht für das Formular. Die View-Klasse verwendet eine Vorlage, die alle Felder anzeigt. Aber das Feld c
wird nur angezeigt, wenn Feld ist wahr.
{% if form.b.value %}
{% form.c %}
{% endif %}
Feld c
ist nicht editierbare und ich möchte nur den Wert zeigen, die bereits vorab definiert ist.
Das Problem ist, dass, wenn ich einen if
Zustand in der Vorlage zu verwenden, (Angenommen b
falsch ist), wenn ich das Formular laden Sie es zeigt zwei Felder a
und b
und wenn ich das Formular mit b
Satz auf true einreichen, die Form Reloads ohne Speichern zeigt alle drei Felder mit dem Wert Feld c
als leer.
Feld c
hat bereits einen Wert und es ist in der DB vorhanden, aber es wird nicht angezeigt. Warum das?
EDIT: Hier ist meine Ansicht, ziemlich einfach
class ItemGeneral(UpdateView):
form_class = ItemUpdateForm
template_name = 'pretixcontrol/item/index.html'
permission = 'can_change_items'
@transaction.atomic()
def form_valid(self, form):
# some code
return super().form_valid(form)
Können Sie versuchen, c read_only zu setzen, anstatt nicht bearbeitet werden? Funktioniert es dann? –