Django中Food模型返回元组而非实际存储值的问题求助
问题描述
我有一个用于存储食物基础营养信息的简单Django项目,仅包含User(继承AbstractUser)和Food两个模型。但在创建或编辑Food模型实例时,获取字段值返回的是元组而非实际存储的数据。
模型代码如下:
class User(AbstractUser): test_field = models.CharField(max_length=100) def __str__(self): return self.username class Food(models.Model): name = models.CharField(max_length=100, null=False, blank=False), calories = models.IntegerField(default=0, null=False), protein = models.IntegerField(default=0), fat = models.IntegerField(default=0), rel_user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
通过shell创建实例测试:
from api.models import User, Food f = Food() f.name = "Test" f.calories = 1 f.rel_user = User.objects.get(id=1) f.save()
调用f.rel_user能返回正确的用户信息,但调用f.name却返回(<django.db.models.fields.CharField>,)。已查阅Django 4.2官方文档、核对配置和模型写法,尝试过多种创建实例的方式,均未解决问题。
解决方案
问题出在Food模型的字段定义末尾多了逗号。每个字段定义后的逗号会让Python将该字段解析为包含Field对象的元组,而非直接把Field对象赋值给字段属性。当你访问f.name时,实际拿到的是这个元组,而非存储的字段值。
修正后的Food模型代码:
class Food(models.Model): name = models.CharField(max_length=100, null=False, blank=False) calories = models.IntegerField(default=0, null=False) protein = models.IntegerField(default=0) fat = models.IntegerField(default=0) rel_user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
修正后,重新执行数据库迁移(python manage.py makemigrations和python manage.py migrate),再创建或查询Food实例,就能正常获取到存储的字段值了。
内容的提问来源于stack exchange,提问作者madamson8
相关产品推荐
相关产品推荐

