У мене така форма:
class My_Form(ModelForm):
class Meta:
model = My_Class
fields = ('first_name', 'last_name' , 'address')
Як я можу поставити поле адреси як необов’язкове?
Відповіді:
Вгадайте, ваша модель така:
class My_Class(models.Model):
address = models.CharField()
Ваша форма для версії Django <1.8:
class My_Form(ModelForm):
address = forms.CharField(required=False)
class Meta:
model = My_Class
fields = ('first_name', 'last_name' , 'address')
Ваша форма для версії 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)
, ви можете написатиabc = forms.ModelChoiceField(queryset=Abc.objects.all(), required=False)
from django import forms
blank=True
? Документи говорять інакше, і моєму коду це не подобається, вони кажуть, що я повинен використовувати required=False
. Ви перевернули ваші знаки?
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
атрибут.
field = models.CharField(max_length=9, default='', blank=True)
Просто додайте blank=True
у поле моделі, і це не буде потрібно, коли ви використовуєте моделі.
джерело: https://docs.djangoproject.com/en/3.1/topics/forms/modelforms/#field-types
Вам слід додати:
address = forms.CharField(required=False)
null=True, blank=True
спричинить поле required=False
Рішення @ Anentropic з коментаря до відповіді @ Atma спрацювало для мене. І я думаю, що це теж найкращий.
Його коментар:
null = True, blank = True призведе до того, що поле ModelForm буде обов'язковим = False
Я просто встановив його на своєму полі ManyToMany у своєму UserProfile
класі, і він працював бездоганно.
Мій UserProfile
клас зараз виглядає так (зауважте friends
поле):
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
friends = models.ManyToManyField('self', null=True, blank=True)
Я також думаю , що це найкрасивіше рішення , так як ви робите те ж саме, покласти null
і blank
до True
, погода у вас є просте char
поле або, як у мене є, ManyToMany
поле.
Знову ж таки, дякую багато @Anentropic. :)
PS Я написав це як допис, оскільки не міг коментувати (у мене менше 50 репутації), але й тому, що, на мою думку, його коментар потребує більшого викриття.
PPS Якщо ця відповідь допомогла вам, будь ласка, підтримайте його коментар.
На ура :)
Рішення: використовувати обидва blank=True
, null=True
.
my_field = models.PositiveIntegerField(blank=True, null=True)
Пояснення:
якщо ви використовуєте null=True
`my_field = models.PositiveIntegerField(null=True)`
тоді потрібно поле my_field, з * проти нього у формі, ви не можете подавати порожнє значення.
якщо ви використовуєте blank=True
`my_field = models.PositiveIntegerField(blank=True)`
тоді my_field не потрібно, ні * проти нього у формі, ви не можете подати значення. Але отримання нульового поля заборонено.
Примітка:
1) marking as not required and
2) allowing null field are two different things.
Порада професіонала:
Read the error more carefully than documentation.
Наведені вище відповіді є правильними; тим не менш належним чином зауважте, що налаштування null=True
на ManyToManyField не впливає на рівень бази даних і під час міграції викликатиме таке попередження:
(fields.W340) null has no effect on ManyToManyField.
Хороша відповідь на це пояснюється в цій іншій темі .