Bagaimana cara saya membuat banyak bidang menjadi opsional di Django?


202

Ketika Anda memiliki hubungan banyak ke banyak ( related_name, tidak through) dan Anda mencoba menggunakan antarmuka admin Anda diminta untuk memasukkan salah satu hubungan meskipun tidak harus ada bagi Anda untuk membuat entri pertama.

Saya membuat aplikasi yang merupakan penyelenggara acara. Bayangkan kita memiliki Eventdan Groupmodel, terikat dengan hubungan banyak ke banyak.

Django related_namemembuat tabel lain dengan indeks dari dua tabel lainnya.
Tapi saya tidak melihat alasan mengapa tabel tambahan ini harus diisi.

Jika saya bekerja dengan database melalui phpMyAdmin saya dapat membuat Grouptanpa mendaftar Event, karena koneksi antara keduanya hanya melalui tabel terpisah, dan tidak ada penegakan nilai database pada level yang diberikan.

Bagaimana cara membuat antarmuka admin ini menyadarinya?
Bagaimana cara membuat bidang banyak ke banyak opsional di Django?

Jawaban:


348

Jika Anda ingin dapat menentukan hubungan ManyToMany tanpa membuatnya diperlukan, gunakan saja blank=True:

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

7
Ini memang memecahkan masalah. Menggunakan blank tidak begitu jelas bagi saya karena saya pikir manytomany membuat tabel yang menghubungkan peristiwa dengan grup (events = models.ManyToManyField (Event, related_name = "groups", blank = True) Jadi tidak jelas untuk menggunakan kosong karena Acara sebenarnya bukan bidang di tabel grup. Pokoknya itu berhasil jadi terima kasih !!!
DZ.

9
@ Home Saya pikir ya, kosong untuk validasi Django, dan null untuk database. Dalam kasus seperti ini (seperti untuk IntegerField) tidak masuk akal untuk menempatkan satu tanpa yang lain saya pikir
lajarre

17
Apakah Anda benar-benar perlu memilikinya null=True? Saya mendapat kesan nulltidak memiliki pengaruh apa pun di ManyToManybidang: stackoverflow.com/questions/18243039/...
Tyler Hayes

5
Ya, um @TylerHayes benar. null = True pada dasarnya adalah no-op dan tidak masuk akal dalam konteks ManyToMany. Saya terbuka untuk ditunjukkan bagaimana saya salah.
Ben Roberts

7
null = Benar tidak diperlukan, setidaknya dari Django 1.5 dan seterusnya.
Ville Laurikari
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.