skz*_*yzg 12 django django-forms django-generic-views
我有一个具有ManyToMany关系的模型,我想用CheckBoxSelectMultiple小部件更新,而其他一切都使用默认的通用形式,但是当我重新定义那个表单字段时,它是唯一一个出现在UpdateView中的表单字段.有没有办法只使用一个字段的小部件,而无需重新定义整个表单?
Views.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 = '/'
Run Code Online (Sandbox Code Playgroud)
forms.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())
Run Code Online (Sandbox Code Playgroud)
我知道这有一个非常简单的解决方案,所以感谢大家提前耐心等待.
虽然我在这里可以推荐任何值得阅读的django书吗?我已经完成了基础教程,根据需要挖掘了文档,并阅读了Django的两个Scoops:https://django.2scoops.org/所以如果你能为我这个级别的人想到一本书,那就是非常感激.再次感谢
Tho*_*mas 12
试试这个,用class Meta
:
from django.forms.widgets import CheckboxSelectMultiple
from django.forms import ModelMultipleChoiceField,ModelForm
from kunden.models import Kunde, Unternehmenstyp
class KundeEditForm(ModelForm):
class Meta: # model must be in the Meta class
model = Kunde
unternehmenstyp = ModelMultipleChoiceField(widget=CheckboxSelectMultiple,required=True, queryset=Unternehmenstyp.objects.all())
Run Code Online (Sandbox Code Playgroud)
参考:https://docs.djangoproject.com/en/1.5/topics/forms/modelforms/#modelform
如果您只需要进行简单的覆盖,也可以使用modelform工厂:
from django.views.generic.edit import UpdateView
from django.forms.models import modelform_factory
from kunden.models import Kunde, Unternehmenstyp
class KundeUpdate(UpdateView):
model = Kunde
form_class = modelform_factory(Kunde,
widgets={"unternehmenstyp": CheckboxSelectMultiple })
template_name = 'kunden/kunde_update.html'
success_url = '/'
Run Code Online (Sandbox Code Playgroud)
参考:https://docs.djangoproject.com/en/1.5/topics/forms/modelforms/#modelform-factory-function
Jon*_*ter 12
这是一个mixin,允许您定义小部件字典并仍然尊重fields
列表:
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)
Run Code Online (Sandbox Code Playgroud)
它可以与CreateView,UpdateView等一起使用.例如:
class KundleUpdate(ModelFormWidgetMixin, UpdateView):
model = Kunde
widgets = {
'unternehmenstyp': CheckboxSelectMultiple,
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6012 次 |
最近记录: |