Проблема с валидацией. Выберите правильный вариант. Ваш вариант не входит в число допустимых значений
Я новичок в Python и Django. Я пытаюсь написать простую систему управления недвижимостью. У меня проблема с присвоением существующей ассоциации домов новому объекту недвижимости. Мои файлы:
models.py
class Property(models.Model):
# Fields
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=45, blank=False) # Property name
address = models.CharField(max_length=198, blank=False) # Property address
postalcode = models.CharField(max_length=6, blank=False) # Property postalcode
city = models.CharField(max_length=45, blank=False) # Property city
kw_number = models.CharField(max_length=15, blank=True) # Numer KW
ha_choice = models.CharField(max_length=2, choices=[(i.pk, i.name) for i in HousingAssociation.objects.all()])
# Foreign Keys
# TODO zmiana on_delete na inny!
house_association = models.ForeignKey(HousingAssociation, on_delete=models.CASCADE)
# Metadata
class Meta:
ordering = ['id']
# Methods
def add(self):
self.save()
def __str__(self):
"""String for representing the MyModelName object (in Admin site etc.)."""
# return self.id, self.name, self.address, self.postalcode, self.city, self.kw_number
return self.name
forms.py
class PropertyForm(forms.ModelForm):
class Meta:
model = Property
fields = ('name', 'address', 'postalcode', 'city', 'ha_choice', 'kw_number')
views.py
def property_form_new(request):
if request.method == "POST":
form = PropertyForm(request.POST)
if form.is_valid():
form.save()
return render(request, 'registration/prop/success.html')
else:
form = PropertyForm()
return render(request, 'registration/prop/prop_new.html', {'property_new': form})
В случае этого django возвращает мне следующее: screenshot
Это означает "Выберите правильный вариант. 14 не входит в число допустимых значений'. 14 - это id существующей записи в базе данных, и она верна. Источник HTML выглядит так:
<h2>Nowa nieruchomość</h2>
<form method="POST" class="post-form">
<input type="hidden" name="csrfmiddlewaretoken" value="wsrMCEU8UfLMHCBGHtKfcI1wZzGdqM8HpEAEyexx2OIDZue8Chi4DaJxsLYg7aHk">
<p><label for="id_name">Name:</label> <input type="text" name="name" value="BCh" maxlength="45" required id="id_name"></p>
<p><label for="id_address">Address:</label> <input type="text" name="address" value="Batalionów Chłopskich 1/18" maxlength="198" required id="id_address"></p>
<p><label for="id_postalcode">Postalcode:</label> <input type="text" name="postalcode" value="15-661" maxlength="6" required id="id_postalcode"></p>
<p><label for="id_city">City:</label> <input type="text" name="city" value="Białystok" maxlength="45" required id="id_city"></p>
<ul class="errorlist"><li>Wybierz poprawną wartość. 14 nie jest żadną z dostępnych opcji.</li></ul>
<p><label for="id_ha_choice">Ha choice:</label> <select name="ha_choice" required id="id_ha_choice">
<option value="">---------</option>
<option value="14" selected>Spółdzielnia1</option>
<option value="15">Spółdzielnia 2</option>
<option value="16">flatman</option>
<option value="17">Perspektywa</option>
<option value="18">ŁSM</option>
<option value="42">ŁSM</option>
<option value="43">ŁSM 43</option>
<option value="44">ŁSM</option>
<option value="45">ŁSM</option>
<option value="46">ŁSM</option>
<option value="47">ŁSM</option>
<option value="48">ŁSM</option>
<option value="49">Spółdzielnia Testowa 0</option>
</select></p>
<p><label for="id_kw_number">Kw number:</label>
<input type="text" name="kw_number" value="BI/1A/56743" maxlength="15" id="id_kw_number"></p>
<button type="submit" class="save btn btn-default">Save</button>
</form>
Я пробовал с
class PropertyForm(forms.ModelForm):
ha_choice = models.ChoiceField(choices=[(i.pk, i.name) for i in HousingAssociation.objects.all()])
class Meta:
model = Property
fields = ('name', 'address', 'postalcode', 'city', 'ha_choice', 'kw_number')
и также с MultipleChoiceField, но без хорошего эффекта. Может ли кто-нибудь помочь найти, как правильно его назначить?
Я нашел решение. Очень просто, достаточно изменить поле
ha_choice
в
class PropertyForm(forms.ModelForm):
class Meta:
model = Property
fields = ('name', 'address', 'postalcode', 'city', 'ha_choice', 'kw_number')
to
house_association
Так просто.