Могу ли я сделать поле внешнего ключа необязательным в модели Django

111

У меня есть этот код

subject      = models.ForeignKey(subjects)
location     = models.ForeignKey(location)
publisher    =  models.ForeignKey(publisher)

Там не всегда возможно, что у меня есть три ценности книг. поэтому иногда, если я не знаю тему, местонахождение или издателя. Тогда я хочу оставить их пустыми

Но если это так, мне нужно выбрать поле для выбора. возможно ли такое

user1
источник

Ответы:

195

Конечно, просто добавьте blank=True, null=Trueдля каждого поля, которое вы хотите оставить необязательным, например

subject = models.ForeignKey(subjects, blank=True, null=True)
Abid A
источник
6
Оба нужны? Каковы были бы недостатки простого использования null = True?
Ward
12
@WardC Комбинация из двух встречается так часто, потому что обычно, если вы собираетесь позволить полю быть пустым в вашей форме, вам также понадобится ваша база данных, чтобы разрешить значения NULL для этого поля. Исключение составляют поля CharFields и TextFields, которые в Django никогда не сохраняются как NULL. Пустые значения хранятся в БД как пустая строка ('').
fang_dejavu
8
@Ward, оба не нужны. Достаточно просто использовать null=True.
Jam
8
blank=Trueважен для проверки формы. Это позволит вводить пустую строку в это поле. null=Trueразрешит значение NULL в столбце базы данных.
cezar
1
Комментарий @cezar спас мне жизнь! Спасибо
po5i