如何初始化一个类?
请帮我通过 __ init__ 来设置 CATEGORY_CHOICES 的初始值。 我有一个 model.py 的类:
from django.db import models
from django.forms import ModelForm
class Anekdots(models.Model):
def __init__(self):
CATEGORY_CHOICES = (
(u'red', u'red'),
(u'blue', u'blue'),
(u'magenta', u'magenta'),
(u'green', u'green'),
(u'yellow', u'yellow'),
)
body = models.TextField(max_length=700)
category = models.CharField(max_length=20, choices=CATEGORY_CHOICES)
但是在我尝试运行 python manage.py syncdb 时,出现了以下错误:
NameError: name 'CATEGORY_CHOICES' is not defined
补充说明:我需要通过 CATEGORY_CHOICES 的 init (self) 来初始化它:
1 个回答
0
为什么要在 __init__
里面做这个呢?
下面的代码示例是从 Django 文档中提取的:https://docs.djangoproject.com/en/1.6/topics/db/models/
class Person(models.Model):
SHIRT_SIZES = (
('S', 'Small'),
('M', 'Medium'),
('L', 'Large'),
)
name = models.CharField(max_length=60)
shirt_size = models.CharField(max_length=1, choices=SHIRT_SIZES)
在你的情况下,应该是:
class Anekdots(models.Model):
CATEGORY_CHOICES = (
(u'red', u'red'),
(u'blue', u'blue'),
(u'magenta', u'magenta'),
(u'green', u'green'),
(u'yellow', u'yellow'),
)
body = models.TextField(max_length=700)
category = models.CharField(max_length=20, choices=CATEGORY_CHOICES)
编辑:根据评论,如果类别记录是动态的,你可以用 CATEGORY_CHOICES = Categories.get_all_entries()
来初始化它们。
不过,如果这些值是从数据库中获取的,你应该考虑添加一个外键,让 Django 模型来处理。我是说(同样是从 Django 文档中提取的):
最后,请注意,选项可以是任何可迭代的对象——不一定是列表或元组。这让你可以动态构造选项。但是,如果你发现自己在努力让选项变得动态,可能更好的是使用一个合适的数据库表和外键。选项是为了那些不太会改变的静态数据。