修改Django ModelForms字段

时间:2012-04-20 14:19:17

标签: python django django-forms modelform

我有一个Django模型,它有一个外键owner,指的是拥有这个对象的用户。 为了让其他用户编辑这些对象,我目前使用forms.ModelForm,到目前为止工作正常。

但我知道想让主人和唯一的主人改变他拥有的对象的所有者(这是一个什么样的!:)。因此,我尝试了以下内容:

class FolderForm(forms.ModelForm):
    def __init__(self, user, *args, **kwargs):
        if kwargs.get("instance", False):
            if user == kwargs["instance"].owner:
                self._meta.fields += ("owner",)

        super(FolderForm, self).__init__(*args, **kwargs)

    class Meta:
        model = Folder
        fields = (
            "name",
            "description",
        )

但这不起作用,因为Django使用了一些元类魔法来设置模型上的字段,这似乎是在调用子类__init__之前完成的。

有人做过这样的事吗?

2 个答案:

答案 0 :(得分:1)

我喜欢通常使用关闭

def make_form(exclude_user=True):
    class Form(forms.ModelForm):
        class Meta:
            model = Folder         
            exclude = ['user'] if exclude_user else None
    return Form

form_cls = make_form(request.user != folder.owner)

答案 1 :(得分:0)

为什么不创建两个表单:

对于不拥有数据的用户(满口)排除所有者并在您的视图中执行简单if语句的人:

if request.user == Model.owner:
    form = OwnerForm
else:
    form = OthersForm

保持尽可能简单有巨大的胜利。