如何初始化一个类?

0 投票
1 回答
532 浏览
提问于 2025-04-18 00:51

请帮我通过 __ 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 文档中提取的):

最后,请注意,选项可以是任何可迭代的对象——不一定是列表或元组。这让你可以动态构造选项。但是,如果你发现自己在努力让选项变得动态,可能更好的是使用一个合适的数据库表和外键。选项是为了那些不太会改变的静态数据。

撰写回答