繁体   English   中英

在Django模型中引用多个外键

[英]Reference multiple foreign keys in Django Model

我正在开发一个有助于记录游戏任务的程序。 在每个任务中,我希望能够从宇航员表中选择一些与之一起工作的宇航员。 当我只需要一个时,这很好,但是如何在一个字段中使用多个外键呢?

我目前使用“二进制”字符串指定要与任务关联的宇航员(1表示Jeb,而不是Bill,Bob或Val,0001表示Val),其中第一个数字指定ID为1的宇航员等等。 这可行,但感觉很笨拙。

这是有问题的两个表的model.py。

class astronauts(models.Model):
    name = models.CharField(max_length=200)
    adddate = models.IntegerField(default=0)
    experience = models.IntegerField(default=0)
    career = models.CharField(max_length=9, blank=True, null=True)
    alive = models.BooleanField(default=True)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name_plural = "Kerbals"

class missions(models.Model):

    # mission details
    programid = models.ForeignKey(programs, on_delete=models.SET("Unknown"))
    missionid = models.IntegerField(default=0)
    status = models.ForeignKey(
        missionstatuses, on_delete=models.SET("Unknown"))
    plan = models.CharField(max_length=1000)

    # launch
    launchdate = models.IntegerField(default=0)
    crewmembers = models.IntegerField(default=0)

    # recovery
    summary = models.CharField(max_length=1000, blank=True)
    recdate = models.IntegerField(default=0)

    def __str__(self):
        return str(self.programid) + '-' + str(self.missionid)

    class Meta:
        verbose_name_plural = "Missions"

我看到了一个有关“中间链接表”的帖子,用于存储乘员列表,但这也不理想。

谢谢!

这是Django的ManyToManyField的用例。 更改任务的适当字段:

class missions(models.Model):
    crewmembers = models.ManyToManyField('astronauts')

您可以从宇航员模型一侧访问此文件,如下所示:

jeb = astronaut.objects.get(name='Jebediah Kerman')
crewed_missions = jeb.missions_set.all()

或者从任务方面来看,像这样:

mission = missions.objects.order_by('?')[0]
crew = mission.crewmembers.all()

万一这对您来说是一个问题,这将在数据库中创建另一个表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM