如何初始化一个类?

时间:2014-04-01 13:39:09

标签: python django

请通过__ 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 (自我)初始化它:

1 个答案:

答案 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的正确数据库表。选择适用于静态数据,如果有的话,变化不大。