django - 如何在不重新定义整个表单的情况下使用具有通用 UpdateView 的自定义小部件?

标签 django django-forms django-generic-views

我有一个具有 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/

相关文章:

python - Django 表单、 View 和 forms.py 不能一起工作

django - 无法解析 : type object 'Member' has no attribute '_default_manager, django 1.10

用于通用关系的 Django 表单。如何包含它们?

django - 无法从 OSX 终端应用程序创建 postgres 数据库

database - Django 原子检查和递减

python - 为什么我的编辑表单不更新数据,但能够创建新实例。我尝试了谷歌上的所有方法,但仍然不起作用

列 "owner_id"中/new null 值处的 Django IntegrityError 违反了非空约束

Django:模型中的验证顺序

python - 如何将 formbuilder 制作的表单添加到 Wagtail 中的每个页面?

python - 在 Django 中手动调用基于类的通用 View