Tôi có một biểu mẫu như thế này:
class My_Form(ModelForm):
class Meta:
model = My_Class
fields = ('first_name', 'last_name' , 'address')
Làm cách nào để đặt trường địa chỉ là tùy chọn?
Câu trả lời:
Đoán mô hình của bạn như thế này:
class My_Class(models.Model):
address = models.CharField()
Biểu mẫu của bạn cho phiên bản Django <1.8:
class My_Form(ModelForm):
address = forms.CharField(required=False)
class Meta:
model = My_Class
fields = ('first_name', 'last_name' , 'address')
Biểu mẫu của bạn cho phiên bản Django> 1.8:
class My_Form(ModelForm):
address = forms.CharField(blank=True)
class Meta:
model = My_Class
fields = ('first_name', 'last_name' , 'address')
abc=models.ForeignKey(Abc)
, bạn có thể viếtabc = forms.ModelChoiceField(queryset=Abc.objects.all(), required=False)
from django import forms
blank=True
không? Các tài liệu nói khác và mã của tôi không thích nó, họ nói tôi nên sử dụng required=False
. Bạn có bị đảo ngược dấu hiệu của mình không?
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
queryset
thuộc tính.
field = models.CharField(max_length=9, default='', blank=True)
Chỉ cần thêm blank=True
vào trường mô hình của bạn và nó sẽ không bắt buộc khi bạn đang sử dụng các biểu mẫu mô hình.
nguồn: https://docs.djangoproject.com/en/3.1/topics/forms/modelforms/#field-types
Bạn sẽ phải thêm:
address = forms.CharField(required=False)
null=True, blank=True
sẽ gây ra các lĩnh vực ModelForm đượcrequired=False
Giải pháp của @ Anentropic từ nhận xét về câu trả lời của @ Atma đã hiệu quả với tôi. Và tôi nghĩ nó cũng là cái hay nhất.
Nhận xét của anh ấy:
null = True, blank = True sẽ khiến trường ModelForm được yêu cầu = False
Tôi vừa đặt nó trên trường ManyToMany trong UserProfile
lớp và nó hoạt động hoàn hảo.
UserProfile
Lớp của tôi bây giờ trông giống như thế này (để ý friends
trường):
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 tốt nhất vì bạn làm điều tương tự, đặt null
và blank
đến True
, thời tiết bạn có một char
cánh đồng đơn giản hoặc, như tôi có, ManyToMany
cánh đồng.
Một lần nữa, cảm ơn rất nhiều @Anentropic. :)
Tái bút Tôi đã viết bài này như một bài đăng vì tôi không thể bình luận (tôi có ít hơn 50 danh tiếng) nhưng cũng vì tôi nghĩ bình luận của anh ấy cần được tiếp xúc nhiều hơn.
PPS Nếu câu trả lời này giúp ích cho bạn, vui lòng ghi chú nhận xét của anh ấy.
Chúc mừng :)
Giải pháp: sử dụng cả hai blank=True
, null=True
.
my_field = models.PositiveIntegerField(blank=True, null=True)
Giải trình:
nếu bạn dùng null=True
`my_field = models.PositiveIntegerField(null=True)`
thì my_field là bắt buộc, với * đối với nó trong biểu mẫu, bạn không thể gửi giá trị trống.
nếu bạn dùng blank=True
`my_field = models.PositiveIntegerField(blank=True)`
thì my_field là không bắt buộc, không có * đối với nó trong biểu mẫu, bạn không thể gửi giá trị. Nhưng sẽ nhận được trường null không được phép.
Ghi chú:
1) marking as not required and
2) allowing null field are two different things.
Mẹo chuyên nghiệp:
Read the error more carefully than documentation.
Các câu trả lời trên đều đúng; tuy nhiên, lưu ý rằng cài đặt null=True
trên ManyToManyField không có hiệu lực ở cấp cơ sở dữ liệu và sẽ đưa ra cảnh báo sau khi di chuyển:
(fields.W340) null has no effect on ManyToManyField.
Một câu trả lời tốt cho điều này được giải thích trong chủ đề khác này .