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)

上面的代码在运行migrate时会抛出错误:ValueError:以10为基数的int()的无效字面量:'vegetable'

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

解决这个问题的最好方法是什么?谢谢你!D

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

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

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

可以将name改为主键:

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

同时,更仔细地查看https://docs.djangoproject.com/en/3.1/ref/models/fields/#choices可能会帮助您在将来做出选择。将它们定义为常量并遵循它们的语法

将更容易编程。

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

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)```