models.py
class City(models.Model):
name = models.CharField(max_length=20)
def __str__(self):
return f"{self.name}"
class Venue(models.Model):
city = models.ForeignKey(City, on_delete=models.CASCADE, blank=False)
forms.py:
class VenueForm(forms.ModelForm):
class Meta:
model = Venue
fields = [
'city',
]
def __init__(self, *args, **kwargs):
super(VenueForm, self).__init__(*args, **kwargs)
self.fields['city'].label = 'Град'
views.py:
form = VenueForm(request.POST or None)
context = {
'form': form,
}
return render(request, "add_venue.html", context)
html渲染:
{% for field in form %}
<div class="fieldWrapper">
{{ field.label_tag }}
<div class="errorcode{{field.html_name}}">
{{ field.errors }}
</div>
{{ field }}
{% if field.help_text %}
<p class="help">{{ field.help_text|safe }}</p>
{% endif %}
</div>
{% endfor %}
在浏览器中的外观:
<select name="city" required id="id_city">
<option value="" selected>---------</option>
<option value="1">Пловдив</option>
<option value="2">София</option>
</select>
问题是此默认值带有虚线<option value="" selected>---------</option>
。
有没有办法删除/更改它?
docs中有解决方案,但这是针对ModelChoiceField
的,这不是我的情况,它是ForeighKey参考。
答案 0 :(得分:1)
文档中有解决方案,但这是针对
p_value people type 1 & 2 X people type 1 & 3 X people type 1 & 4 X people type 2 & 3 X people type 2 & 4 X people type 3 & 4 X
的,这不是我的情况,它是ModelChoiceField
的参考。
如果您在ForeighKey
上定义了Form
,则ModelForm
(因此也就ForeignKey
)没有ForeignKey
字段,如documentation of ModelForm
s [Django-doc]中所述。模型级别,则对应于您的ModelChoiceField
中的ModelForm
。
因此,您可以使用None
来更改empty_label=…
parameter [Django-doc]:
class VenueForm(forms.ModelForm):
class Meta:
model = Venue
fields = [
'city',
]
def __init__(self, *args, **kwargs):
super(VenueForm, self).__init__(*args, **kwargs)
self.fields['city'].label = 'Град'
self.fields['city'].empty_label = None