我正在用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
当我尝试进行迁移时,出现以下错误:
第15行,用post language = LanguageCategory()NameError:未定义名称'LanguageCategory'
如何解决此问题,以及如何在Post中使用LanguageCategory,以使Blog帖子具有用于选择语言的字段?
您可以外键。您可以像下面这样引用它,而不是直接引用。
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/zh-CN/3.1/ref/models/fields/#lazy-relationships
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句