2016-08-22 16 views
0

彼らの違いが不思議です。例:django形式のプロパティとmetaフィールドの違いは何ですか?

from django import forms 
from django.contrib.auth.models import User 
from django.contrib.auth.forms import UserCreationForm 

GENDER_CHOICES = (
    ('M', '남'), 
    ('F', '여'), 
) 


class MyUserCreationForm(UserCreationForm): 
    email = forms.EmailField(required=True) 
    birth = forms.DateField(widget=forms.SelectDateWidget(
     years=range(1970, 2015)), required=True) 
    gender = forms.ChoiceField(choices=GENDER_CHOICES, initial='M') 

    class Meta: 
     model = User 
     fields = ('username', 'birth', 'email', 
        'gender', 'password1', 'password2') 

    def save(self, commit=True): 
     user = super(MyUserCreationForm, self).save(commit=False) 
     user.email = self.cleaned_data['email'] 
     user.birthday = self.cleaned_data['birth'] 

     if commit: 
      user.save() 

     return user 

これはフォームの特性としてemailbirthgenderを定義し、それはまた、Class Metafieldsを有しています。彼らの違いを明確に理解したい。前もって感謝します。

答えて

0

Meta.fieldsのプロパティはmodel formsです。これは、モデルフォームで処理するモデルフィールドを指定するために使用します。あなたがそうのようなモデルを持っていたのであれば:

class MyModel(models.Model): 
    name = models.CharField(max_length=255) 
    date = models.DateField(auto_now=True) 

あなたはdateが自動人口であり、あなたは、ユーザーが手動で設定できるようにしたくない場合がありますのでだけ、nameを処理するフォームを定義することができます。

class MyModelForm(forms.ModelForm): 

    class Meta: 
     model = Article 
     fields = ['name'] 

このプロパティは、標準(非モデル)フォームでは使用されません。

UserモデルのModelFormという質問サブクラスのフォームUserCreationFormです。したがって、fieldsプロパティは、フォームに公開するモデルプロパティのうち、どれがUserのものかを指定しています。あなたがモデルに含まれていないフォームにフィールドを追加したい

  1. :場合はクラス自体に

    フィールド定義(emailbirthgenderは)のみ必要です。この場合、genderbirthのようになります(これらのフィールドを持つカスタムユーザーモデルがない限り)。

  2. フィールドのレンダリングに使用するウィジェットをカスタマイズする必要があります。この場合、元のフィールドを上書きしてカスタムウィジェットを指定することができます。これは、ウィジェットがデフォルトのウィジェットに存在しない制限された日付範囲を持つbirthフィールドで行われていることです。あなたが明示的にクラスでそれらを指定していないので、

他のすべてのフィールド(usernameemail)は、デフォルトのウィジェットを使用してレンダリングされます。 password1およびpassword2Userモデルプロパティではありませんが、UserCreationFormで定義されている追加のフィールドです。

関連する問題