簡體   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