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

在Django同一models.py文件中外键关联模型时遇名称未定义错误

问题解决:Django模型关联出现“名称 'chaiVariety' 未定义”错误

错误原因

你的代码核心问题是把chaiReview模型嵌套定义在了chaiVariety模型内部,Django不支持嵌套的模型类结构,同时嵌套类内部直接引用外部类名也会因为作用域问题找不到定义。

解决方案

  1. 将chaiReview模型从chaiVariety类内部移出,放在models.py的顶层(和chaiVariety同级)
  2. 建议遵循Django模型类的大驼峰命名规范(如ChaiVariety、ChaiReview),提升代码可读性
  3. 确保正确导入User模型

修正后的代码

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User

class ChaiVariety(models.Model):
    CHAI_TYPE_CHOICE = [
        ('ML', 'MASALA'),
        ('GR', 'GINGER'),
        ('KL', 'KIWI'),
        ('PL', 'PLAIN'),
        ('EL', 'ELAICHI'),
    ]
    name = models.CharField(max_length=100)
    image = models.ImageField(upload_to='chais/')
    date_added = models.DateTimeField(default=timezone.now)
    type = models.CharField(max_length=2, choices=CHAI_TYPE_CHOICE)
    description = models.TextField(default=' ')

    def __str__(self):
        return self.name

# 一对多关联:一个ChaiVariety对应多个ChaiReview
class ChaiReview(models.Model):
    chai = models.ForeignKey(ChaiVariety, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    rating = models.IntegerField()
    comment = models.TextField()
    date_added = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f'{self.user.username} review for {self.chai.name}'

内容的提问来源于stack exchange,提问作者Vibekananda Champati

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 10:58:15