为什么我的Django模型字段无法正常工作?

3
我认为它无法识别我的字段存在。这是我的models.py文件内容:
from django.db.models import *
from django.contrib import admin
from django.forms import *

class Stock(Model):
    name = CharField(max_length=60)

    class Meta:
        ordering = ["name"]

    def __unicode__(self):
        return self.name

admin.site.register(Stock)

当我运行它时,出现了这个错误:“portfolio.stock:'ordering'指的是不存在的字段'name'。”当我注释掉meta函数并运行它时,在管理站点上创建股票对象时,字段不会显示出来,但其他方面都正常。
我对发生的事情完全感到困惑。
1个回答

6
问题在于您的*导入。 django.db.models.CharField将被django.forms.CharField替换:
>>> from django.db.models import *
>>> CharField 
<class 'django.db.models.fields.CharField'>
>>> from django.forms import *
>>> CharField 
<class 'django.forms.fields.CharField'>

所以,实际上name = CharField(max_length=60)定义的是一个表单字段而不是模型字段 - 它破坏了一切并使这个bug变得微妙。


解决方案:删除不必要的forms导入,并在导入时明确说明:

from django.db import models
from django.contrib import admin


class Stock(models.Model):
    name = models.CharField(max_length=60)

    class Meta:
        ordering = ["name"]

    def __unicode__(self):
        return self.name

admin.site.register(Stock)

还要注意models.Modelmodels.CharField的更改 :p - keyser

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