创建具有多个外键的查找表

时间:2018-06-27 20:58:06

标签: django django-models

为澄清起见而编辑:

我正在尝试在Django中创建查找表,但不确定如何实现。我有两个桌子,一个桌子有“花的钱”,第二个桌子有“免费礼物”。您花费一定的金额,就会得到更多(一对多)的免费礼物。

例如下面的图片,如果您花费 $ 50 ,您将获得冰淇淋苏打作为免费礼物。在较低级别,您将只获得一份免费礼物。

enter image description here

我创建了此模型,但是运行迁移不喜欢它。

class GiftDefaults(models.Model):
    """
    Default gifts associated with spending levels
    """

    # Fields
    gift = models.ForeignKey(Gift, null=True, blank=True,on_delete=models.CASCADE),
    spending_level = models.ForeignKey(SpendingLevel, null=True, blank=True,on_delete=models.CASCADE)

    def __str__(self):
        return self.gift

在Django模型中创建此查找表的正确方法是什么?不知道我的模型怎么了。

这是makemigrations的输出,您可以看到它跳过了“礼物”列。

operations = [
    migrations.CreateModel(
        name='GiftDefaults',
        fields=[
            ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
            ('spending_level', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='giving.SpendingLevel')),
        ],
    ),
]

1 个答案:

答案 0 :(得分:0)

问题是gift列创建结束时的逗号,使代码分成我怀疑的元组。正确的代码应该是

class GiftDefaults(models.Model):
    """
    Default gifts associated with spending levels
    """

    # Fields
    gift = models.ForeignKey(Gift, null=True, blank=True,on_delete=models.CASCADE)
    spending_level = models.ForeignKey(SpendingLevel, null=True, blank=True,on_delete=models.CASCADE)

    def __str__(self):
        return self.gift

将其删除后,Makemigrations会按预期工作。