我创建了联系表格,但复选标记不显示该选项,框非常窄。所以当以管理员身份登录并尝试添加联系人时,我在那里看不到选项。这里是models.py和forms.py和截图。
models.py
class Location(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Contact(models.Model):
LOCATION_INHOME = (
('kitchen', 'Kitchen'),
('bathroom', 'Bathroom'),
('bedroom', 'Bedroom'),
('livingroom', 'Living Room'),
('basement', 'Basement'),
('garage', 'Garage'),
('office', 'Office'),
('hallway', 'Hallway'),
('stairway', 'Stairway'),
('recreationroom', 'Recreation Room'),
('closet', 'Closet'),
('other', 'Other'),
)
location_in_home = models.ManyToManyField(Location)
class ContactForm(ModelForm):
model = Contact
fields = '__all__'
class Meta:
model = Contact
fields = '__all__'
forms.py
from django import forms
from django.forms import ModelForm
from .models import Contact
class ContactForm(forms.ModelForm):
class Meta:
model = Contact
fields = [
'location_in_home',
]
widgets = {
'location_in_home': forms.CheckboxSelectMultiple(),
}
这里是admin.py
class ContactAdmin(admin.ModelAdmin):
list_filter = ('location_in_home')
admin.site.register(Contact, ContactAdmin)
2条答案
按热度按时间31moq8wy1#
选择框为空,因为
Location
模型中没有值。多对多模型适用于动态创建可通过M2M关系链接的示例的情况,而不是像在LOCATION_INHOME
中创建的静态选择。如果你想有一个选择多个表单域与静态选项,你需要使用第三方软件包,如https://pypi.org/project/django-select-multiple-field/。如果您想使用M2M关系的动态选择,您需要首先在Location
模型中填充这些选项。iugsix8n2#
需要将表单附加到
ModelAdmin
的**.form
**属性[Django-doc]上:当然,如果至少有一个位置已经构建,它将只呈现选项。
否则你只是构造了一个形式。但是你可以为同一个模型创建零个、一个或多个
ModelForm
,除非你在视图、管理等中使用它们,否则它们不会做任何事情。