2009-12-28 16 views
8

İki django uygulamalar var Sağlar ki:Django: ManyToManyField içeren modele farklı bir uygulamada bir ManyToManyField içinde "aracılığıyla" modele sahip bir yolu var mı?

  • yarışmalar - yarışma verilerini idare edecek olan
  • girişleri - In

yarışmalar giren yarışmacılara ilişkin işlevselliği idare edecek yarışmalar uygulaması Bir yarışmanın bir bölümünü temsil eden bir modelim var:

class Division(models.Model): 
    competition = models.ForeignKey(Competition) 
    discipline = models.CharField(max_length=1, choices=DISCIPLINE_CHOICES) 
    age_group = models.ForeignKey(AgeGroup) 
    participants = models.ManyToManyField(Competitor, through='Entry') 
Ben girişleri uygulamasında giriş modeli koymak istiyorum

: çalıştıkları böylece

class Entry(models.Model): 
    division = models.ForeignKey('Division') 
    competitor = models.ForeignKey(Competitor) 
    withdrawn = models.BooleanField(default=False) 

Nasıl gelen ... ithalat ... tabloların çözmek?

Error: One or more models did not validate: entries.entry: 'division' has a relation with model Division, which has either not been installed or is abstract. competitions.division: 'participants' specifies an m2m relation through model Entry, which has not been installed

neden anlamak: Ben ithalat tablolara koyduğunuzda böyle from entries.models import Entry olarak ben birini veya her ikisini de kaldırmak zaman doğrulama hataları olsun (ithalat dairesel olduğu için) ya da syncdb tarafından göz ardı Bu uygulamalardan gelen modeller olsun Bu olur, ama bunu nasıl değiştireceğime dair hiçbir fikrim yok, bu yüzden işe yaradı (Giriş modelini gerçekten yapmak istemediğim yarışmalar uygulamasına gitmeye başvurmadan). Bazı durumlarda, dairesel ithalatlar üzerinde çalışmanıza yardımcı olur.

+0

Rakip sınıfı mı? – czarchaic

cevap

16

görünüyor ben daha tutarlı çalışır :)

bir cevap, buldum gibi Django documentation on the ForeignKey class diyor : Eğer göndermeden

To refer to models defined in another application, you can explicitly specify a model with the full application label. For example, if the Manufacturer model above is defined in another application called production, you'd need to use:

class Car(models.Model): 
    manufacturer = models.ForeignKey('production.Manufacturer') 

This sort of reference can be useful when resolving circular import dependencies between two applications.

5

bazen, django.db.models.get_model. senin örnekte, buna Entry yılında division FK tanımını normalde Entry ithalat ve değiştirebileceğimiz deneyin:

from django.db.models import get_model 

class Entry(models.Model): 
    division = models.ForeignKey(get_model('competitions', 'Division')) 
+0

Bunu görebildiğimden, her zaman işe yaramıyor ... Sanırım django, uygulamaları ya da bunun gibi bir şeyi yükleyen sıraya bağlı. Hala - çok yararlı ipucu, teşekkürler :) –

+0

"bazen";) –

+0

ooops, benim kötü;) –