Django:选择字段模型的外键

时间:2021-03-11 00:45:21

标签: django

我对 Python / Django 比较陌生。

我正在尝试在食品和类别(名称)之间建立关系 他们属于:

class Category(models.Model):
    options=(
        ('vegetable','vegetable'),
        ('fruit','fruit'),
        ('carbs','carbs'),
        ('fish','fish'),
        ('meat', 'meat'),
        ('sweet', 'sweet'),
        ('dairy', 'dairy'),
    )
    name=models.CharField(max_length=10,choices=options,unique=True)
    def __str__(self):
        return self.name

class Fooditem(models.Model):

    name = models.CharField(max_length=50)
    category = models.ForeignKey(Category,on_delete=models.CASCADE)

上面的代码在运行迁移时抛出错误: ValueError:int() 的文字无效,基数为 10:'vegetable'

我在数据库中创建了一些项目,是这个原因吗?

解决这个问题的最佳方法是什么? 谢谢,

2 个答案:

答案 0 :(得分:0)

它会修复它,但你可能会有一些意想不到的结果。

    category = models.ForeignKey(Category,on_delete=models.CASCADE)

将是指向另一个模型的 id。

您可以通过将名称更改为以下内容来使名称成为主键:

    name=models.CharField(max_length=10,choices=options,unique=True,primary_key=True)

此外,更仔细地查看 https://docs.djangoproject.com/en/3.1/ref/models/fields/#choices 可能会帮助您确定未来的选择。定义为costant并遵循其语法将更容易编程

答案 1 :(得分:0)

我真的建议你这样做。如果有什么不清楚的,请告诉我

class Category(models.TextChoices):
   
    vegetable='vegetable'
    fruit='fruit'
    carbs='carbs'
    fish='fish'
    meat='meat'
    sweet='sweet'
    dairy='dairy'
   

class Fooditem(models.Model):

    name = models.CharField(max_length=50)
    category = models.CharField(max_length=20, choices=Category.choices)```
相关问题