我创建了一个带有外键的模型:
class Book(models.Model):
library = models.ForeignKey(Library, null=False, blank=False)
...
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个带有ModelForm的表单,以显示给用户:
class BookSubmitForm(ModelForm):
class Meta:
model = Book
Run Code Online (Sandbox Code Playgroud)
当我显示带有表单的页面时,我会获得库选项,但也会默认显示空白(--------)选项.
我认为在模型中使用null = False和blank = False可以摆脱ModelForm中的空白选择但是没有.我该怎么做只在列表中有实际选择而不是那个?
Ily*_*lya 38
请参见ModelChoiceField.您必须将empty_label设置为None.所以你的代码将是这样的:
class BookSubmitForm(ModelForm):
library = ModelChoiceField(queryset=Library.objects, empty_label=None)
class Meta:
model = Book
Run Code Online (Sandbox Code Playgroud)
编辑:将字段名称更改为小写
Hen*_*Liu 11
如果您使用ModelForm,则不必指定queryset,required,label等.但是对于upvoted答案,您必须再次执行此操作.
实际上你可以这样做,以避免重新指定一切
class BookSubmitForm(ModelForm):
def __init__(self, *args, **kwargs):
super(BookSubmitForm, self).__init__(*args, **kwargs)
self.fields['library'].empty_label = None
class Meta:
model = Book
Run Code Online (Sandbox Code Playgroud)
Mit*_*ril 11
self.fields['xxx'].empty_label = None
不起作用如果你的字段类型是TypedChoiceField
没有empty_label
属性.我们应该做的是删除第一选择:
class BookSubmitForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(BookSubmitForm, self).__init__(*args, **kwargs)
for field_name in self.fields:
field = self.fields.get(field_name)
if field and isinstance(field , forms.TypedChoiceField):
field.choices = field.choices[1:]
Run Code Online (Sandbox Code Playgroud)
如果指定blank=False
和default=<VALUE>
在模型字段定义上,则Django默认情况下不会呈现空白选项; 请注意,默认值可以是无效选项,例如设置为''
或任何invalid choice
值.
class Book(models.Model):
library = models.ForeignKey(Library, null=False, blank=False, default='')
...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15181 次 |
最近记录: |