2012-04-20 58 views
0

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

但我知道要让所有者和只有拥有者更改他拥有的对象的拥有者(什么是拥有者!:)。因此,我尝试了以下内容:

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__调用之前要做的字段。

有没有人做过这样的事情?

+0

你需要所有者设置为谁创建的文件夹对象的用户? – San4ez 2012-04-20 14:35:45

回答

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) 
+0

工程!神奇的方式来做到这一点:) – dom0 2012-04-20 15:35:35

0

你为什么不创建两种形式:

一个排除车主对于没有自己的数据(满口)用户,做一个简单的if语句在您的视图:

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

让它尽可能简单,让巨大的胜利落空。

+0

是的,我知道,但如果表单可以自己处理它,它会很酷... – dom0 2012-04-20 14:31:03