操作前務必import以下:
form django import forms
form mapp.models import MyModel
P.S:我們將使用Meta class,實作ModelForm
ModelForm操作案例:
1. show model中全部的欄位,使用__all__
class MyForm(models.ModelForm):
class Meta:
model = MyForm()
fields = "__all__"
2. 排除特定欄位,使用exclude
class MyForm(models.ModelForm):
class Meta:
model = MyForm()
exclude = ["field1", "field2", "field3"]
3. 指定特定欄位
class MyForm(models.ModelForm):
class Meta:
model = MyForm()
fields = ("field1", "field2", "field3")
如想要客制驗證,可以直接寫在Form class裡
class MyForm(models.ModelForm):
# 加在這 name = froms.CharField(...)
class Meta:
model = MyForm()
fields = ("field1", "field2", "field3")
# 更改Modelform field 屬性
widgets = {
'field1': forms.TextInput(attrs={'class': 'textinputclass'}),
'field2': forms.Textarea(attrs={'class': 'editable medium-editor-textarea postcontent'}),
}
widgets = {
'field1': forms.TextInput(attrs={'class': 'textinputclass'}),
'field2': forms.Textarea(attrs={'class': 'editable medium-editor-textarea postcontent'}),
}
現在我們將進行ModelForm實作,假設我們已經有一個User Model,現在要製作一個輸入User Model頁面
1. 設定form.py
class MyModelForm(forms.ModelForm):
class Meta():
model = User
fields = '__all__'
2. 設定templates
<form method="POST">
{{ form.as_p }}
{% csrf_token %}
<input type="submit" value="Submit">
</form>
3. 設定views.py
from form import MyModelForm
def model_form_name_view(request):
form = forms.MyModelForm()
if request.method == 'POST':
form = MyModelForm(request.POST)
if form.is_valid():
form.save(commit=True) # exection, same as form.save()
return index(request)
else:
print('ERROR FORM INVALID')
return render(request, 'myapp/model_form_page.html', {'form' : form})
4. 設定urls.py
完成
隱藏內建User model help_text 訊息
# form.py
from django.contrib.auth.models import User
class UserForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput())
class Meta():
model = User
help_texts = {
'username': None, # 取消掉
}
fields = ('username', 'email', 'password')
完成
隱藏內建User model help_text 訊息
# form.py
from django.contrib.auth.models import User
password = forms.CharField(widget=forms.PasswordInput())
class Meta():
model = User
help_texts = {
'username': None, # 取消掉
}
fields = ('username', 'email', 'password')
完成
沒有留言:
張貼留言