Django'da çoktan çoğa alanı nasıl isteğe bağlı yapabilirim?


204

Çoktan çoğa bir ilişkiniz olduğunda ( related_namedeğil through) ve yönetici arabirimini kullanmaya çalıştığınızda, ilk girdiyi oluşturmanız için gerekli olmasa da ilişkilerden birini girmeniz gerekir.

Etkinlik düzenleyicisi olan bir uygulama oluşturuyorum. Düşündüğümüzü Eventve Groupmodellerimiz olduğunu, çoktan çoğa ilişkiye bağlı olduğumuzu hayal edin .

Django related_namediğer iki tablonun indekslerini içeren başka bir tablo oluşturur.
Ama bu ekstra tablo neden göremiyorum sahiptir doldurulması.

Ben phpMyAdmin üzerinden veritabanı ile çalışırsanız, bir Groupkayıt olmadan bir oluşturabilirsiniz Event, çünkü ikisi arasındaki bağlantı sadece ayrı bir tablo üzerinden ve verilen düzeyde hiçbir veritabanı değeri zorlaması yoktur.

Yönetici arayüzünün bunu fark etmesini nasıl sağlayabilirim?
Django'da çoktan çoğa alanı nasıl isteğe bağlı yapabilirim?

Yanıtlar:


351

ManyToMany ilişkisini zorunlu kılmadan belirleyebilmek istiyorsanız sadece şunu kullanın blank=True:

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

7
Bu sorunu çözer. Boş kullanmak benim için çok açık değildi çünkü manytomanyın olayları gruplarla ilişkilendiren bir tablo oluşturduğunu düşündüm (events = models.ManyToManyField (Event, related_name = "groups", blank = True) Bu yüzden kullanımı net değildi Etkinlik aslında grup tablosunda bir alan olmadığından boş. Yine de işe yaradı çok teşekkür ederim !!!
DZ.

9
@omouse Evet, boş django doğrulaması için ve veritabanı için null olduğunu düşünüyorum. Bu tür bir durumda (IntegerField için olduğu gibi) bence diğeri olmadan birini koymak mantıklı değil
lajarre 26:12

17
Gerçekten ihtiyacın var null=Truemı? Ben izlenim altında alanlar nullüzerinde hiçbir etkisi yoktur ManyToMany: stackoverflow.com/questions/18243039/…
Tyler Hayes

5
Evet, um @TylerHayes haklı. null = True temelde bir işlem yapılmaz ve ManyToMany bağlamında saçmadır. Nasıl yanıldığımı göstermeye açıkım.
Ben Roberts

7
null = True gerekli değildir, en azından Django 1.5'ten itibaren.
Ville Laurikari
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.