请通过__ 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 ps我需要通过CATEGORY_CHOICES init(自身)进行初始化:
为什么需要在内部进行__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)
编辑:(基于注释)如果类别记录是动态的,则可以使用初始化它们的方法来初始化它们:CATEGORY_CHOICES = Categories.get_all_entries()
但是,如果这些值是从DB获取的,则应考虑添加FK并让django模型完成这项工作。我的意思是(也摘自django doc):
最后,请注意,选择可以是任何可迭代的对象-不一定是列表或元组。这使您可以动态构造选择。但是,如果您发现自己的黑客选择是动态的,那么最好使用带有ForeignKey的正确数据库表。选择是针对不变的静态数据(如果有的话)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句