[英]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.