2014-09-23 20 views
7

için birden fazla ForeignKey.Django yönetici ben yönetici bölümünde alt form ile bir form uygulamak çalışıyorum admin.TabularInline

form = Fighter() 
subform = FighterFightHistory() //All of his fights 

Sorunum şudur:

<class 'fighters.admin.Fights'>: (admin.E202) 'fighters.FighterFightHistory' has more than one ForeignKey to 'fighters.Fighter'. 

yüzden formu aşağı her yabancı anahtar (fighter, opponent) için bir damla göstermek yapabilirim nasıl.

2 yabancı anahtar (aşağıya bakınız) vardır:

  • avcı (fighter)
  • rakibe (opponent)

savaşçıları/modeller bir bağlantı için bağlantı. p)

class FighterFightHistory(TimeStampedModel): 
    event = models.ForeignKey('events.Event', null=True) 
    fight = models.ForeignKey('fights.Fight', null=True) 
    fighter = models.ForeignKey(Fighter, related_name='%(app_label)s_%(class)s_fighter', null=True) 
    howitended = models.ForeignKey('fights.HowItEnded', null=True) 
    opponent = models.ForeignKey(Fighter, related_name='%(app_label)s_%(class)s_opponent', null=True) 

    ended_in_round = models.IntegerField(blank=True, null=True) 
    youtube_code = models.CharField(max_length=50, null=True, blank=True) 
    win = models.NullBooleanField(blank=True, null=True) 
.210 savaşçıları/admin.py

class Fights(admin.TabularInline): 
    model = FighterFightHistory 
    extra = 30 


class FighterAdmin(admin.ModelAdmin): 

    list_display = ('name', 'history_completed', 'modified', 'active') 
    search_fields = ['name'] 
    inlines = [Fights, ] 

cevap

17

Bu (kullanarak fk_name) sorunumu çözdü
2

Aklıma ilk sen ManyToMany-Fields kullanabilir ve daha sonra ikiye ilişkilerin sayısını sınırlamak verebilecek oldu. Ama sonra düşündüm ki, hangi Fighter-Object'in hangi türü temsil ettiğinden emin olamazsın.

Sonra Django-Dokümanlar kısa bir göz attık, sorunu cevaplamak gereken bir şey buldum: Django-Doc

ilginç parçasıdır:

Üyelik iki yabancı Kişiye anahtarları (kişiyi vardır ve inviter), bu ilişkiyi belirsiz kılar ve Django hangisini kullanacağını bilemez. Bu durumda, yukarıdaki örnekte olduğu gibi, Django'nun hangi yabancı anahtarlar aracılığıyla kullanacağını açıkça belirtmelisiniz.

Bu size yardımcı olur umarım.

class Fights(admin.TabularInline): 
    model = FighterFightHistory 
    extra = 30 
    fk_name = 'fighter' 
:
İlgili konular