2013-04-25 38 views
40

Tôi có một hình thức như thế này:Django ModelForm KHÔNG Bắt buộc điền vào

class My_Form(ModelForm): 
    class Meta: 
     model = My_Class 
     fields = ('first_name', 'last_name' , 'address') 

Làm thế nào tôi có thể đặt trường địa chỉ như bắt buộc?

+1

Mô hình trông như thế nào? – Ngenator

Trả lời

43

Đoán mô hình của bạn là như thế này:

class My_Class(models.Model): 

    address = models.CharField() 

Biểu mẫu của bạn:

class My_Form(ModelForm): 

    address = forms.CharField(required=False) 

    class Meta: 
     model = My_Class 
     fields = ('first_name', 'last_name' , 'address') 
+1

Còn lĩnh vực khóa ngoại thì sao? – digz6666

+10

Sử dụng ModelChoiceField. Vì vậy, nếu định nghĩa trường là 'abc = models.ForeignKey (Abc)', bạn có thể viết 'abc = forms.ModelChoiceField (queryset = Abc.objects.all(), required = False)' –

+1

Đảm bảo rằng biểu mẫu được nhập nếu bạn không sử dụng nó trước đây: 'từ các hình thức nhập khẩu django' –

5

Bạn sẽ phải thêm:

address = forms.CharField(required=False, blank=True, null=True) 
+3

Thuộc tính trống và không được sử dụng cho ModelForms –

+2

trường này phải nằm trong trường _model_, không phải là trường biểu mẫu. 'null = True, blank = True' sẽ khiến trường ModelForm là' required = False' – Anentropic

59
class My_Form(forms.ModelForm): 
    class Meta: 
     model = My_Class 
     fields = ('first_name', 'last_name' , 'address') 

    def __init__(self, *args, **kwargs): 
     super(My_Form, self).__init__(*args, **kwargs) 
     self.fields['address'].required = False 
+3

Khi câu trả lời của akshar trông tốt hơn, phương pháp này ngăn bạn phải làm công cụ để đặt các công cụ như help_text và nhãn. – Blackeagle52

+3

Phương pháp này đặc biệt hữu ích trong việc xử lý các trường được định nghĩa là FK ở cấp mô hình. Bằng phương thức của akshar, người ta phải đặt thuộc tính 'queryset'. – PritishC

2

@ giải pháp Anentropic từ bình luận trên @Atma's answer đã hoạt động tôi. Và tôi nghĩ đó là một trong những tốt nhất.

bình luận của ông:

null = True, trống = True sẽ gây ra các lĩnh vực ModelForm được yêu cầu = False

tôi chỉ cần đặt nó trên sân ManyToMany của tôi trong lớp UserProfile của tôi và nó làm việc hoàn hảo.

lớp UserProfile của tôi bây giờ trông như thế này (chú ý lĩnh vực friends):

class UserProfile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    friends = models.ManyToManyField('self', null=True, blank=True) 

Tôi cũng nghĩ rằng đây là giải pháp đẹp nhất kể từ khi bạn làm điều tương tự, đặt nullblank-True, thời tiết bạn có một trường đơn giản char hoặc, như tôi có, trường ManyToMany.

Một lần nữa, cảm ơn rất nhiều @Anentropic. :)

P.S. Tôi đã viết bài này làm bài đăng vì tôi không thể nhận xét (tôi có ít hơn 50 danh tiếng) nhưng cũng vì tôi cho rằng nhận xét của anh ấy cần được hiển thị nhiều hơn.

P.P.S. Nếu câu trả lời này giúp ích cho bạn, vui lòng cập nhật nhận xét của anh ấy.

Chúc mừng :)

Các vấn đề liên quan