在models.py[Django]中的另一个类中使用类对象

2024-10-01 07:28:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Django写一个博客应用程序。在models.py中,我有两个类:Post和LanguageCategory。在语言类别中,我会预先定义哪些语言是适用的,比如英语、意大利语,这可以由超级用户在管理员登录中创建。但是,在Post类中,我希望使用LanguageCategory类作为名为languages的属性,如下所示(models.py的代码):

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

# Create your models here.
# https://stackoverflow.com/questions/29536180/django-blog-adding-published-date-field-to-new-posts-and-ability-to-login-as-non
class Post(models.Model):
    title = models.CharField(max_length=300)
    keywords = models.CharField(max_length=300, default="some keywords here")
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    created_date = models.DateTimeField(
            default=timezone.now)
    published_date = models.DateTimeField(auto_now_add=True,
            blank=False, null=False)
    language = LanguageCategory()
    image = models.ImageField(upload_to='blog_images/', default='blog_images/myimage.png')
    body = models.TextField()

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title + ' | ' + str(self.author)


class LanguageCategory(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

当我尝试进行迁移时,出现以下错误:

line 15, in Post language = LanguageCategory() NameError: name 'LanguageCategory' is not defined

如何解决此问题,以及如何在文章中使用LanguageCategory,以便博客文章具有选择语言的字段


Tags: todjangofromimportself语言datemodels
1条回答
网友
1楼 · 发布于 2024-10-01 07:28:08

你可以用外键。而不是直接引用,你可以引用它如下

language = models.ForeignKey('LanguageCategory', on_delete=models.CASCADE)

完整代码如下:

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

# Create your models here.
# https://stackoverflow.com/questions/29536180/django-blog-adding-published-date-field-to-new-posts-and-ability-to-login-as-non
class Post(models.Model):
    title = models.CharField(max_length=300)
    keywords = models.CharField(max_length=300, default="some keywords here")
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    created_date = models.DateTimeField(
            default=timezone.now)
    published_date = models.DateTimeField(auto_now_add=True,
            blank=False, null=False)
    language = models.ForeignKey('LanguageCategory', on_delete=models.CASCADE)
    image = models.ImageField(upload_to='blog_images/', default='blog_images/myimage.png')
    body = models.TextField()

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title + ' | ' + str(self.author)


class LanguageCategory(models.Model):
    name = models.CharField(max_length=100, default='english', primary_key = True)

    def __str__(self):
        return self.name

参考:

https://docs.djangoproject.com/en/3.1/ref/models/fields/#lazy-relationships

相关问题 更多 >