2012-04-20 11 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

あなたはFolderオブジェクトを作成したユーザーに所有者を設定する必要がありますか? – San4ez

答えて

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

0

なぜあなたは、次の2つの形式を作成しない:

データ(一口)を所有していないユーザーのために、所有者を除外し

Oneとあなたのビューでif文の簡単な操作を行います。

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

大変シンプルにしてください。

+0

ええ、私は知っていますが、フォームがそれ自体を扱うことができるなら冷静になります... – dom0

関連する問題