请通过__ 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
PS ps我需要通过CATEGORY_CHOICES init (自我)初始化它:
答案 0 :(得分:0)
为什么需要在__init__
?
从django docs中提取的示例代码: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)
编辑 :(基于评论)如果类别记录是动态的,您可以使用init来创建它们:CATEGORY_CHOICES = Categories.get_all_entries()
但是,如果从DB获取值,则应考虑添加FK并让django模型完成工作。我的意思是(也是从django doc中提取的):
最后,请注意,选择可以是任何可迭代对象 - 不一定是列表或元组。这使您可以动态构造选择。但是如果你发现你自己选择了动态的选择,你可能最好使用一个带有ForeignKey的正确数据库表。选择适用于静态数据,如果有的话,变化不大。