2014-09-23 12 views
7

Próbuję zaimplementować formularz z podformularzem w sekcji administracyjnej.django admin więcej niż jeden ForeignKey dla admin.TabularInline

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

Mój problem jest następujący:

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

Więc jak mam zrobić forma wykazują spadek w dół dla każdego klucza obcego (fighter, opponent).

2 klucz obcy są (patrz poniżej):

  • linka do bojownika (fighter)
  • Link do przeciwnika (opponent)

fighters/models. py

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) 

Strażacy/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, ] 

Odpowiedz

17

to rozwiązać mój problem (używając fk_name):

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

Moją pierwszą myślą było, że można użyć ManyToMany pól, a następnie ograniczyć liczbę relacji do dwóch. Ale wtedy pomyślałem, że nigdy nie możesz być pewien, który Fighter-Object reprezentuje który typ.

Wtedy miałem krótkie spojrzenie w Django Docs i znaleźć coś, co powinien odpowiedzieć problemu: Django-Doc

Interesującą częścią jest:

Członkostwo ma dwa klucze obce na osobę (osoby i inviter), co sprawia, że ​​związek jest niejednoznaczny, a Django nie wie, którego użyć. W tym przypadku musisz wyraźnie określić, które klucze obce Django powinny używać przy użyciu through_fields, tak jak w powyższym przykładzie.

Mam nadzieję, że to ci pomoże.

Powiązane problemy