首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我如何给`def formfield_for_manytomany`一个可编辑对象的id

在Django中,def formfield_for_manytomany是一个可编辑的表单字段,它允许对ManyToManyField中的多个表进行编辑。要为一个可编辑对象指定ID,可以在formfield_for_manytomany方法中返回一个IDField对象,如下所示:

代码语言:python
代码运行次数:0
复制
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django.forms.models import inlineformset_factory

class MyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = ['name', 'description', 'my_m2m_field']

    my_m2m_field = forms.ModelChoiceField(
        queryset=MyModel.objects.all(),
        widget=forms.Select(attrs={'id': 'my-m2m-field'})
    )

class MyModelFormSet(inlineformset_factory(MyModelForm)):
    class Meta:
        model = MyModel
        fields = ['name', 'description', 'my_m2m_field']

    def formfield_for_manytomany(self, db_field, request, **kwargs):
        if db_field.name == 'my_m2m_field':
            kwargs['widget'] = forms.Select(attrs={'id': 'my-m2m-field'})
            return forms.IDField(widget=forms.HiddenInput(), required=False)
        return super().formfield_for_manytomany(db_field, request, **kwargs)

class UserForm(UserCreationForm):
    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']

在上面的代码中,我们首先定义了一个MyModelForm,它继承自ModelForm,并且包含了namedescriptionmy_m2m_field这些字段。其中my_m2m_field是一个ManyToManyField,它关联了MyModelMyModel

接下来,我们定义了一个MyModelFormSet,它继承自inlineformset_factory,并且也关联了my_m2m_field。在formfield_for_manytomany方法中,我们返回了一个IDField对象,它的widget属性指定了使用Select控件,并且attrs属性指定了控件的属性。因为我们希望这个IDField对象是由Select控件来实现的,所以我们不能直接返回forms.IDField对象。

最后,我们在UserForm中使用了UserCreationForm来创建用户表单,并且在Meta属性中指定了模型和字段。在formfield_for_manytomany方法中,我们同样返回了一个IDField对象,但是与MyModelFormSet不同的是,我们没有在widget属性中指定使用Select控件,而是指定了forms.HiddenInput。这是因为在UserForm中,我们没有必要让用户选择User对象的ID,因为用户已经创建了一个User对象,我们只需要将用户对象返回即可。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的文章

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券