Django模型选项

6

我一直在为如何在我的模型中做出选择而感到困惑。

到目前为止,我在模型的approved字段上遇到了问题。我希望approved成为三个选择之一,但我得到的似乎是所有三个选择的元组。在“./manage.py shell”中,我得到:

>>> listing.objects.all()[0].approved
((u'1', u'Awaiting'), (u'2', u'No'), (u'3', u'Yes'))

我的模型:

from django.db import models

# Create your models here.
class directory(models.Model):
    name = models.CharField(max_length="50")

class listing(models.Model):
    name = models.CharField(max_length="50")
    directory = models.ForeignKey(directory)
    birthday = models.DateField()
    state = models.CharField(max_length="2") 
    owner = models.CharField(max_length="50")
    approved = (
        (u'1', u'Awaiting'),
        (u'2', u'No'),
        (u'3', u'Yes'),
    )

此外还有一个问题:每当我进行模型更改并尝试使用South迁移模式时,命令行会冻结,永远无法完成模式迁移。有什么可能的建议可以解决它冻结的原因吗?它可以检测到更改,但永远不会完成实现。由于它从未完成,当我单击模型进行更改时,我无法通过管理面板访问我的模型,我永远无法加载该页面。

The order in which I run the commands are
    ./manage.py convert_to_south myapp
    ./manage.py schemamigration southtut --auto
    ./manage.py migrate southtut ( never progresses on this command after the first few lines appear)

1
你应该将第二部分变成一个单独的问题,以保持主题的相关性,而不是让它成为“附带问题”。 - Vinay Pai
我建议你修复模型后再次尝试South迁移。此外,将上面的“myapp”更改为“southtut”,因为像我这样的其他人会看到它并想知道是否与问题有关。同时,请将类名改为大写字母开头的单词(CapWords)。如果您还没有阅读Python PEP-8指南,建议您阅读:http://www.python.org/dev/peps/pep-0008/#class-names - tobych
1个回答

19

approved属性不是字段,它只是一个包含三个选项的类属性。这些选项需要是实际字段的属性:

APPROVAL_CHOICES = (
    (u'1', u'Awaiting'),
    (u'2', u'No'),
    (u'3', u'Yes'),
)
approved = models.CharField(max_length=1, choices=APPROVAL_CHOICES)

如果我的字段数据类型是整数而不是CharField,这是否可能? - Neeraj Gupta
谢谢Daniel,抱歉,我对Django非常陌生。以下代码对我有用,django管理界面现在显示了一个下拉菜单。 ACTIVE = 0 INACTIVE = 1 STATUS = ( (ACTIVE, '活跃'), (INACTIVE, '不活跃'), )class TemplateAddon(models.Model): status = models.IntegerField(default=0, choices=STATUS) - Neeraj Gupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接