繁体   English   中英

Django:选择字段的外键 model

[英]Django : Foreign Key to a choice field model

我对 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: invalid literal for int() with base 10: 'vegetable'

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

解决此问题的最佳方法是什么? 谢谢你,D

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

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

将是一个指向另一个 model 的 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)```

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM