Django các biểu mẫu.Form so với các biểu mẫu.ModelForm


77

Bất cứ ai có thể giải thích cho tôi những điểm giống và khác nhau của Django's forms.Form& forms.ModelForm?

Câu trả lời:


123

Các biểu mẫu được tạo từ forms.Formdo bạn định cấu hình thủ công. Tốt hơn hết bạn nên sử dụng chúng cho các biểu mẫu không tương tác trực tiếp với các mô hình. Ví dụ: biểu mẫu liên hệ hoặc biểu mẫu đăng ký nhận bản tin, nơi bạn có thể không nhất thiết phải tương tác với cơ sở dữ liệu.

Biểu mẫu được tạo từ đâu forms.ModelFormsẽ được tạo tự động và sau đó bạn có thể chỉnh sửa. Các ví dụ tốt nhất thực sự là từ tài liệu tuyệt vời được cung cấp trên trang web Django.

forms.Form:
Tài liệu: Đối tượng biểu mẫu
Ví dụ về một biểu mẫu bình thường được tạo bằng forms.Form:

from django import forms

class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    message = forms.CharField()
    sender = forms.EmailField()
    cc_myself = forms.BooleanField(required=False)

forms.ModelForm:
Tài liệu: Tạo biểu mẫu từ mô hình
Trực tiếp từ tài liệu:

Nếu biểu mẫu của bạn sẽ được sử dụng để thêm hoặc chỉnh sửa trực tiếp mô hình Django, bạn có thể sử dụng biểu mẫu ModelFormđể tránh trùng lặp mô tả mô hình của mình.

Ví dụ về biểu mẫu mô hình được tạo bằng forms.Modelform:

from django.forms import ModelForm
from . import models

# Create the form class.
class ArticleForm(ModelForm):
    class Meta:
        model = models.Article

Biểu mẫu này tự động có tất cả các loại trường giống như Articlemô hình mà nó được tạo từ đó.


Cảm ơn! Tôi có thể hỏi: Tôi có thể hiển thị ModelForm trên các khung nhìn bình thường không nằm trong khu vực quản trị không? Biểu mẫu có thể được hiển thị và xử lý ở dạng xem bình thường khi bạn chuyển request.POST để khởi tạo nó.
Việt

1
Vâng. Đó là mục đích sử dụng của họ. Các biểu mẫu quản trị là một con thú hoàn toàn khác và nằm ngoài phạm vi của câu hỏi này. Làm quen với việc tham khảo tài liệu chính thức. Nó là tuyệt vời và nó sẽ giúp bạn tiết kiệm hầu như mọi lúc.
jathanism

13

Điểm giống nhau là cả hai đều tạo ra các tập hợp đầu vào biểu mẫu bằng cách sử dụng các widget và cả hai đều xác thực dữ liệu được gửi bởi trình duyệt. Sự khác biệt là ModelForm nhận định nghĩa trường của nó từ một lớp mô hình được chỉ định và cũng có các phương thức xử lý việc lưu mô hình cơ bản vào cơ sở dữ liệu.


8

Đây là cách tôi mở rộng UserCreationForm nội trang myapp / form.py :

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


class RegisterForm(UserCreationForm):

    first_name = forms.CharField(max_length=30)
    last_name = forms.CharField(max_length=30)
    email = forms.CharField(max_length=75)

    class Meta(UserCreationForm.Meta):
        fields = ('username','first_name','last_name', 'email')
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.