2016-09-13 77 views
1
from django import forms 
from .models import NewsSignUp 

class NewsSignUpForm(forms.ModelForm): 
    class Meta: 
     model = NewsSignUp 
     fields = ['email', 'first_name'] 
here 

此代碼工作得很好。但是,當我刪除「類元:」如下,它拋出一個ValueError說爲什麼在創建模型表單時需要「類Meta」?

from django import forms 
from .models import NewsSignUp 

class NewsSignUpForm(forms.ModelForm): 
    model = NewsSignUp 
    fields = ['email', 'first_name'] 

是否有人可以給個說法「的ModelForm已沒有指定模型類。」? :(

+0

This [post](http://stackoverflow.com/questions/10344197/how-does-djangos-meta-class-work)解釋更好 – kt14

+0

@ kt14實際上是不一樣的:這是專注於從模型,而關聯的問題更多的是關於模型定義中的元數據。我發現,兩者在Django中如何使用'Meta'是互補的,基本上不重疊。 – neuronet

回答

4

您正在創建一個ModelForm子類。模型的形式有一個模型,從工作,並且Meta對象配置此。

配置這樣的分組到Meta類避免名稱衝突。這樣你可以有一個model在形式不與配置干擾換句話說,通過使用class Meta:你得到一個嵌套的命名空間中使用只是配置ModelForm相對於該型號。

然後(Meta之外)ModelForm類體本身的命名空間保留給表單域自身以及表單域方法。您通常只需讓ModelForm從您的模型中生成這些字段,但原則上,您可以將字段添加到字段中。將字段放入類中的另一個原因是用您自己的版本完全替換任何生成的字段。

Model Forms documentation

ModelForm是一個普通Form能夠自動生成的某些字段。自動生成的字段取決於Meta類的內容以及哪些字段已被聲明性定義。基本上,ModelForm只會生成表單中缺少的字段,換句話說,沒有聲明性定義的字段。聲明性地定義

域被保持原樣,因此任何定製到Meta屬性如widgetslabelshelp_texts,或error_messages被忽略製成;這些僅適用於自動生成的字段。

因爲ModelForm預計該配置下的Meta名稱進行設置,你不能只是刪除,並把modelfieldsModelForm類本身;那只是錯誤的地方。

+0

謝謝Fella! :) – Utkarsh

相關問題