我有一个具有 ManyToMany 关系的模型,我想用 CheckBoxSelectMultiple 小部件更新它,而其他所有小部件都使用默认的通用表单,但是当我重新定义一个表单字段时,它是唯一一个显示在 UpdateView 中的字段。有没有一种方法可以使用只有一个字段的小部件而不必重新定义整个表单?
View .py:
from django.views.generic.edit import UpdateView
from kunden.models import Kunde, Unternehmenstyp
from kunden.forms import KundeEditForm
class KundeUpdate(UpdateView):
model = Kunde
form_class = KundeEditForm
template_name = 'kunden/kunde_update.html'
success_url = '/'
表格.py:
from django.forms.widgets import CheckboxSelectMultiple
from django.forms import ModelMultipleChoiceField,ModelForm
from kunden.models import Kunde, Unternehmenstyp
class KundeEditForm(ModelForm):
model = Kunde
unternehmenstyp = ModelMultipleChoiceField(widget=CheckboxSelectMultiple,required=True, queryset=Unternehmenstyp.objects.all())
我知道这有一个非常简单的解决方案,所以提前感谢大家的耐心等待。
当我在它时,有人可以推荐任何值得阅读的 Django 书籍吗?我已经阅读了基础教程,根据需要挖掘了文档,并阅读了两勺 Django:https://django.2scoops.org/所以如果你能想到适合我这个水平的人的一本书,那将不胜感激。再次感谢
最佳答案
这是一个允许您定义小部件字典并仍然遵守 fields
的 mixin。列表:
from django.forms.models import modelform_factory
class ModelFormWidgetMixin(object):
def get_form_class(self):
return modelform_factory(self.model, fields=self.fields, widgets=self.widgets)
它可以与 CreateView、UpdateView 等一起使用。例如:
class KundleUpdate(ModelFormWidgetMixin, UpdateView):
model = Kunde
widgets = {
'unternehmenstyp': CheckboxSelectMultiple,
}
关于django - 如何在不重新定义整个表单的情况下使用具有通用 UpdateView 的自定义小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16937076/