Как сделать поле «многие ко многим» необязательным в Django?


202

Если у вас есть отношение «многие ко многим» ( related_nameне through), и вы пытаетесь использовать интерфейс администратора, вам необходимо ввести одно из отношений, даже если вам не нужно существовать для создания первой записи.

Я создаю приложение, которое является организатором событий. Представьте , что мы имели Eventи Groupмодель, связанную со многими-ко-многим.

Django related_nameсоздает еще одну таблицу с индексами двух других таблиц.
Но я не вижу причин , почему эта дополнительная таблица имеет заселяться.

Если я работаю с базой данных через phpMyAdmin, я могу создать Groupбез регистрации Event, так как соединение между ними происходит только через отдельную таблицу, и на данном уровне нет принудительного применения значения базы данных.

Как мне сделать, чтобы интерфейс администратора это понял?
Как сделать поле «многие ко многим» необязательным в Django?

Ответы:


348

Если вы хотите иметь возможность указать отношение ManyToMany без необходимости его использования, просто используйте blank=True:

class Group(models.Model):
    ...
    events = models.ManyToManyField(Event, blank=True)

7
Это решает проблему. Использование пробела было не столь очевидно для меня, потому что я думал, что многие создали таблицу, которая связывает события с группами (events = models.ManyToManyField (Event, related_name = "groups", blank = True). Поэтому было не понятно, как использовать пробел, так как Event фактически не является полем в групповой таблице. В любом случае, это сработало, так что спасибо !!!
DZ.

9
@omouse Я думаю, да, пусто для проверки django, а пусто для базы данных. В таком случае (как для IntegerField) нет смысла ставить одно без другого, я думаю
lajarre

17
Вы действительно должны иметь null=True? У меня сложилось впечатление, что это nullникак не повлияет на ManyToManyполя: stackoverflow.com/questions/18243039/…
Тайлер Хейс,

5
Да, @TylerHayes прав. null = True в основном не работает и не имеет смысла в контексте ManyToMany. Я открыт, чтобы показать, как я ошибаюсь.
Бен Робертс

7
null = True не требуется, по крайней мере, начиная с Django 1.5.
Вилле Лаурикари
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.