2013-04-25 10 views

ответ

43

Угадайте ваша модель выглядит так:

class My_Class(models.Model): 

    address = models.CharField() 

Ваша форма:

class My_Form(ModelForm): 

    address = forms.CharField(required=False) 

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

Что относительно поля внешнего ключа? – digz6666

+10

Используйте ModelChoiceField. Итак, если определения полей - это 'abc = models.ForeignKey (Abc)', вы можете написать 'abc = forms.ModelChoiceField (queryset = Abc.objects.all(), required = False)' –

+1

Убедитесь, что формы импортированы, если вы не использовали его раньше: 'from django import forms' –

5

Вы бы добавить:

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

Пустые и нулевые атрибуты не используются для ModelForms –

+2

, это должно быть в поле _model_, а не в поле формы. 'null = True, blank = True' приведет к тому, что поле ModelForm будет' 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

. Более того, ответ akshar выглядит лучше, этот метод мешает вам делать что-то, чтобы установить такие вещи, как help_text и label. – Blackeagle52

+3

Этот метод особенно полезен при работе с полями, которые определены как FK на уровне модели. По методу akshar нужно установить атрибут 'queryset'. – PritishC

2

@ решение Anentropic в от комментария на @Atma's answer работал меня. И я думаю, что это тоже самое лучшее.

Его комментарий:

нуль = True, пустой = 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.

Опять же, спасибо большое @ Энтропий.)

P.S. Я написал это как сообщение, так как не мог прокомментировать (у меня меньше 50 репутации), но также потому, что я думаю, что его комментарий требует больше внимания.

P.P.S. Если этот ответ помог вам, прокомментируйте его комментарий.

Cheers :)

Смежные вопросы