我正在制作一个有助于在游戏中记录任务的程序。在这些任务中,我希望能够从宇航员表中选择一些宇航员。当我只需要一个时,这很好,但我怎么能在一个字段中接近多个外键?
我目前使用'二进制'字符串指定哪些宇航员与任务相关联(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"
我看到一篇关于“中间链接表”的帖子来存储工作人员列表,但这也不太理想。
谢谢!
答案 0 :(得分:0)
这是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()
这会在数据库中创建另一个表,以防您在某种程度上成为问题。