2017-02-14 5 views
2

Django ModelFormとDjango Modelの繰り返しを避ける方法があります。 など。私たちはこれらのエンティティ間の反復がある見ることができるようにそれDjango ModelFormとDjangoモデルの間の繰り返しを避ける

class CategoryForm(forms.ModelForm): 
    name = models.CharField(max_length=128) 
    class Meta: 
     model = Category 
     fields = ('name',) 

class Category(models.Model): 
    name = models.CharField(max_length=128) 

と対応のModelForm:私はこの最も単純なモデルを持っています。このコード

max_length=128 

- それは "自分自身を繰り返さない"原則に違反していますか?
違反した場合、このコードの重複をどうやって避けることができますか?

+1

2番目のクラスは 'ModelForm'ではなく' Model'から継承されていますが、それはタイプミスですか?また、 'ModelForm'のフィールドを明示的に定義する必要はありません。 – yedpodtrzitko

+0

はい、タイプミスです。固定しました。すみません。今はOKです。 –

答えて

0

十分です。 Metaクラスのfields属性にリストするだけです。あなたが十分なドライではないと感じたら。あなたは__all__

設定するフィールドは、モデル内のすべてのフィールドが使用されるべきである を示すために特別な値「すべて」に属性を使用することができます。例えば:

文献:https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/

1

ただし、フォームにnameフィールドを指定する必要はありません。

あなたはModelFormを使用していますので、Metaではフォームで使用するこのフォームとフィールドを参照するモデルを定義するだけです。 Djangoはウィジェットを取得してフォームを作成します。

だから、他の回答で指摘したように、あなたが再びのModelForm内のフィールドを宣言する必要はありません

class CategoryForm(forms.ModelForm): 
    class Meta: 
     model = Category 
     fields = ('name',) 
0

--model

class Category(models.Model): 
    name = models.CharField(max_length=128) 

- 体

class CategoryForm(forms.ModelForm): 
    class Meta: 
    model = Category 
    fields = ('name',) 

-View

class CategoryView(request): 
    form = CategoryForm() 
    if request.method == "POST": 
     #code.. 
     return render(request,'htmlpage.html',{Variables: Variables}) 
    else: 
     return render(request, "htmlpage.html",{'form':form}) 

'フォーム'を作成し、ページを表示します。ここでは、htmlページからのリクエストがPOSTで照会されます。投稿が要求されていない場合は、FORMテンプレートがhtmlページに送信されます。

関連する問題