为什么我的django模型字段不起作用?

ale*_*027 3 python django django-models django-admin

我认为它并没有认识到我的领域的存在.这是我的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)
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到这个错误:"portfolio.stock:"ordered"指"name",这是一个不存在的字段." 当我评论元函数并运行它时,它工作正常,直到管理站点,当我尝试创建一个库存对象时,字段不显示.

我对发生的事情感到很困惑.

ale*_*cxe 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'>
Run Code Online (Sandbox Code Playgroud)

因此,实际上name = CharField(max_length=60)定义了一个表单字段而不是模型字段 - 它会破坏所有内容并使此错误变得微妙.


解决方案:删除不必要的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)
Run Code Online (Sandbox Code Playgroud)