在Django Mod中引用多个外键

2024-09-26 17:41:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作一个程序来帮助记录游戏中的任务。在每一次任务中,我都希望能够从宇航员表中选出一些与之相伴的宇航员。当我只需要一个外键时,这是很好的,但是我如何处理一个字段中的多个外键呢?在

我目前使用的是一个“二进制”字符串,它指定哪些宇航员将与任务相关联(1表示Jeb,但不是Bill、Bob或Val,0001表示只有Val),第一个数字指定id为1的宇航员,依此类推。这很管用,但感觉很笨重。在

这是模型.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"

我看到一篇关于“中间链接表”来存储船员名单的帖子,但这也不太理想。在

谢谢!在


Tags: nameselftruedefaultmodelmodelsvallength
1条回答
网友
1楼 · 发布于 2024-09-26 17:41:39

这是Django的ManyToManyField的用例。更改任务的相应字段:

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

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

^{pr2}$

或者从任务方面来说:

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

这将在数据库中创建另一个表,以防这对您造成某种问题。在

相关问题 更多 >

    热门问题