gpt4 book ai didi

python - 为什么我的 Django 模型会抛出错误?

转载 作者:太空宇宙 更新时间:2023-11-03 15:22:35 25 4
gpt4 key购买 nike

我正在为博客应用构建一个模型。

这是模型:

from django.db import models

class Tag(models.Model):
keyword = models.CharField(max_length=256)
posts = models.ManyToManyField(Post)

def __unicode__(self):
return self.keyword

class Post(models.Model):
title = models.CharField(max_length=512)
image = models.ImageField
body = models.TextField()
visible = models.BooleanField()
date_created = models.DateTimeField(auto_now_add=True)
date_updated = models.DateTimeField(auto_now=True)
tags = models.ManyToManyField(Tag)

def __unicode__(self):
return self.title

我将博客包添加到 settings.py 中。然后我运行 python manage.py sql blog。我收到以下错误:

 File "/pathto/blog/models.py", line 5, in Tag
posts = models.ManyToManyField(Post)
NameError: name 'Post' is not defined

我不明白为什么Post没有定义,因为我是在models.py文件中定义的。我错过了什么?

最佳答案

问题

当您定义Tag 类时,Post 类尚未定义。因为您正在引用它,所以您会得到 NameError 异常。

解决方案

因此,更改此行:

posts = models.ManyToManyField(Post)

进入这一行:

posts = models.ManyToManyField('Post')

解释

The documentation给你解决方法:

If you need to create a relationship on a model that has not yet been defined, you can use the name of the model, rather than the model object itself:

class Car(models.Model):
manufacturer = models.ForeignKey('Manufacturer')
# ...

class Manufacturer(models.Model):
# ...

替代方案

您还可以省略 Tag 类中的 posts 定义(“posts = models.ManyToManyField(Post)”行),仅为 Post 模型中的反向关系提供适当的名称。 Django 会知道如何处理它。只需替换这一行:

tags = models.ManyToManyField(Tag)

用这一行:

tags = models.ManyToManyField(Tag, related_name='posts')

要了解更多信息,请阅读 related_name argument when defining relations (ForeignKeyManyToManyField)。

关于python - 为什么我的 Django 模型会抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12774134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com