在ForeignKey中过滤查询

时间:2018-04-10 10:21:44

标签: django wagtail

假设我有100个玩家和10个团队,我如何从FroreignKey下拉选择器中移除任何已经被另一个团队选中的玩家?

SpielerTeamRelationshipModel内我有player = models.ForeignKey(Spieler),我希望不要显示已经被其他球队选中的球员。这可能吗?

class Spieler(models.Model):
    name = models.CharField(max_length=128)
    vorname = models.CharField(max_length=128)

    panels = [
        FieldPanel('name', classname="col6"),
        FieldPanel('vorname', classname="col6"),
    ]

class SpielerTeamRelationshipModel(models.Model):
    player = models.ForeignKey(Spieler)
    in_team_seit = models.DateField()
    page = ParentalKey('TeamRooster',
        related_name='spieler_in_team')

    panels = [
        FieldPanel('player', classname="col6"),
        FieldPanel('in_team_seit', classname="col6")
    ]

class TeamRooster(Page):
    content_panels = [
        FieldPanel('title'),
        InlinePanel(
            'spieler_in_team', label="Spieler",
            panels=None)
    ]

一名球员只能在一支球队中。一支球队可以拥有一名或多名球员。非常方便的是InlinePanel,但是每次从100选择一个玩家,这是非常难以忍受的。

或许我做得不对,有更聪明的方法来解决这个问题?

2 个答案:

答案 0 :(得分:1)

奇怪,但没有人提到unique_together。它将帮助您在团队和玩家之间建立独特的关系。

class Player(models.Model):
    name = models.CharField(max_length=128)
    team = models.ForeignKey(Team, blank=True, null=True)

    class Meta:
        ...
        unique_together = ("id", "team")

或有时候你会需要这个

    class Meta:
        ...
        unique_together = ("name", "team")
祝你好运!

答案 1 :(得分:0)

而不是让球员成为球队中的FK

您可以通过在Player表中将团队作为FK来解决问题