Данные из формы choices не сохраняеются из фронтэнда, но сохраняются из админки
Из admin при изменении записи все поля и все выпадающие списки choices корректно сохраняются и отображаются на странице, но когда я пытаюсь обновить запись из фронтэнда, то сохраняются только текстовые поля, а выпадающие списки choices нет. В чём проблема?
views.py
def create(request):
error = ''
if request.method == 'POST':
form = NewAnzeigenForm(request.POST)
if form.is_valid():
form.save()
return redirect('home')
else:
error = 'Ooopps.. Fehler...'
form = NewAnzeigenForm()
data = {
'form': form,
'error': error
}
return render(request, 'main/create.html', data)
models.py
class NewAnzeigen(models.Model):
name = models.CharField('Name', max_length=255)
preis = models.CharField('Preis', max_length=255)
telefon = models.CharField('Telefon', max_length=255)
beschreibung = models.TextField('Beschreibung')
anzeigenummer = models.CharField('Anzeigenummer', max_length=255)
standort = models.CharField('Standort', max_length=500)
online = models.CharField('Online seit', max_length=255)
url = models.CharField('URL', max_length=1000)
bild = models.CharField('Bild', max_length=1000)
rasse = models.CharField('Rasse', max_length=255, choices=RASSEN, default='')
alter = models.CharField('Alter', max_length=255, default=1)
grosse = models.CharField('Grosse', max_length=255, default=100)
geschlecht = models.CharField('Geschlecht', max_length=255, default='')
art = models.CharField('Art', max_length=255, choices=ART, default='')
ausbildung = models.CharField('Ausbildung', max_length=255, choices=AUSBILDUNG, default='')
abstammung = models.CharField('Abstammung', max_length=255, choices=ABSTAMMUNG, default='')
farbe = models.CharField('Farbe', max_length=255, choices=FARBE, default='')
forms.py
from .models import NewAnzeigen
from django.forms import ModelForm, TextInput, Textarea
from django import forms
RASSEN = (
('araber', 'Araber'),
('ha', 'Hispano-Araber'),
('cruzado', 'Cruzado'),
('lustiano', 'Lustiano'),
('pre', 'PRE'),
('muli', 'Muli'),
('esel', 'Esel'),
)
ART = (
('fohlen', 'Fohlen'),
('stute', 'Stute'),
('hengst', 'Hengst'),
('wallach', 'Wallach'),
)
AUSBILDUNG = (
('ungeritten', 'Ungeritten'),
('geritten', 'Geritten'),
('hs', 'Hohe Schule'),
('zucht', 'Zucht'),
)
ABSTAMMUNG = (
('ja', 'Ja'),
('nein', 'Nein'),
)
FARBE = (
('falbe', 'Falbe'),
('bucksin', 'Bucksin'),
('schimmel', 'Schimmel'),
('rappe', 'Rappe'),
('schecke', 'Schecke'),
('ps', 'Porzellanschecke'),
('fuchs', 'Fuchs'),
('brauner', 'Brauner'),
('champagne', 'Champangne'),
('cremello', 'Cremello'),
('palomino', 'Palomino'),
('tg', 'Tigerschecke'),
)
class NewAnzeigenForm(ModelForm):
rasse = forms.ChoiceField(choices=RASSEN)
farbe = forms.ChoiceField(choices=FARBE)
abstammung = forms.ChoiceField(choices=ABSTAMMUNG)
art = forms.ChoiceField(choices=ART)
ausbildung = forms.ChoiceField(choices=AUSBILDUNG)
class Meta:
model = NewAnzeigen
fields = ['name', 'beschreibung', 'preis', 'standort', 'telefon', 'alter', 'geschlecht', 'grosse']
widgets = {
'name': TextInput(attrs={
'class': 'form-control',
'placeholder': 'Name eingeben'
}),
'beschreibung': Textarea(attrs={
'class': 'form-control',
'placeholder': 'Beschreibung eingeben'
}),
'preis': TextInput(attrs={
'class': 'form-control',
'placeholder': 'Preis eingeben'
}),
'standort': TextInput(attrs={
'class': 'form-control',
'placeholder': 'Ort / Land eingeben'
}),
'telefon': TextInput(attrs={
'class': 'form-control',
'placeholder': 'Telefonnummer eingeben'
}),
'alter': TextInput(attrs={
'class': 'form-control',
'placeholder': 'Alter eingeben'
}),
'grosse': TextInput(attrs={
'class': 'form-control',
'placeholder': 'Größe in cm. eingeben'
}),
'geschlecht': TextInput(attrs={
'class': 'form-control',
'placeholder': 'Geschlecht eingeben'
}),
}
Ответы (1 шт):
Автор решения: Za Ars
→ Ссылка
class Meta:
model = NewAnzeigen
fields = ['name', 'beschreibung', 'preis', 'standort', 'telefon', 'alter', 'geschlecht', 'grosse']
Скорее всего не сохраняются потому что не указали поля в fields.
Добавьте остальные поля в Meta.fields и попробуйте. Должно заработать
Похожая проблема была тут