You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 03:12:48