【问题标题】:Attribute Error 'module' object has no attribute 'DateField'属性错误“模块”对象没有属性“日期字段”
【发布时间】:2013-04-29 12:01:54
【问题描述】:

我正在尝试在 Satchmo/Django 中扩展管理员定义,但在尝试将 formfield_override 添加到 ProductOptions 时遇到错误“属性错误‘模块’对象没有属性‘DateField’”:

from django.contrib import admin
from django.conf import settings
from widgets import AdminImageWidget, AdminDateWidget

from django.forms import models, ValidationError
from django.utils.translation import ugettext_lazy as _
from l10n.l10n_settings import get_l10n_setting
from l10n.utils import moneyfmt
from livesettings import config_value
from product.models import *
#from product.utils import import_validator, validate_attribute_value
#from satchmo_utils.thumbnail.field import ImageWithThumbnailField
#from satchmo_utils.thumbnail.widgets import AdminImageWithThumbnailWidget
#from django.http import HttpResponseRedirect
import re

from product.admin import *


class ProductImage_Inline(ProductImage_Inline):
    model = ProductImage
    extra = 0

    formfield_overrides = {
        ImageWithThumbnailField : {'widget' : AdminImageWidget},
    }

class ProductOptions(ProductOptions):

    #list_display += ('slug', 'name', 'formatted_price', 'formatted_inventory', 'active','featured', 'get_subtypes')
    list_display = ('name', 'sku', get_categories, 'formatted_price', 'active','featured', 'get_subtypes')

    list_display_links = ('name',)
    list_filter = ('category', 'date_added','active','featured')
    actions = ('make_active', 'make_inactive', 'make_featured', 'make_unfeatured')
    fieldsets = (
        (None, {'fields': ('name', 'slug', 'sku')}), 
        (None, {'fields': ('site', 'category')}), 
        (None, {'fields': ('description', 'short_description', 'date_added','active', 'featured', 'items_in_stock','total_sold','ordering', 'shipclass')}), 
        (_('Meta Data'), {'fields': ('meta',), 'classes': ('collapse',)}),
        (_('Item Dimensions'), {'fields': (('length', 'length_units','width','width_units','height','height_units'),('weight','weight_units')), 'classes': ('collapse',)}),
        (_('Tax'), {'fields':('taxable', 'taxClass'), 'classes': ('collapse',)}),
        (_('Related Products'), {'fields':('related_items','also_purchased'),'classes':('collapse',)}))

    search_fields = ['slug', 'sku', 'name', 'category__name']
    inlines = [ProductAttribute_Inline, Price_Inline, ProductImage_Inline]
    if get_l10n_setting('show_admin_translations'):
        inlines.append(ProductTranslation_Inline)
    filter_horizontal = ('category',)

#     formfield_overrides = {
#       models.ImageField: {'widget': AdminImageWidget}}

    formfield_overrides = {
        models.DateField: {
            'widget': AdminDateWidget,
            'input_formats': settings.VALID_DATE_FORMATS,
            },
        }

    def formfield_for_dbfield(self, db_field, **kwargs):
        field = super(ProductOptions, self).formfield_for_dbfield(db_field, **kwargs)
        fieldname = db_field.name
        if fieldname in ("length_units", "width_units", "height_units"):
            field.initial = default_dimension_unit()
        elif fieldname == "weight_units":
            field.initial = default_weight_unit()
        return field

admin.site.unregister(Product)
admin.site.register(Product, ProductOptions)

模型中应该可用的其他类型的字段 (CharField) 会产生相同的错误。

关于我应该在哪里解决这个问题有什么想法吗?

【问题讨论】:

  • print models.__name__, models.__file__ 打印什么?您有太多 import * 语句,无法更明智地确定您在此处导入的内容。
  • 它显示了这个:django.forms.models /Library/Python/2.6/site-packages/django/forms/models.pyc
  • 那条print 语句是在formfield_overrides 行之前执行的吗?
  • 这就是我所做的(又快又脏):
  • **>>> import django >>> from django.conf import settings >>> from django.contrib import admin >>> from django.forms import models, ValidationError >>> from product. models import * >>> from product.admin import * >>> print models.__name__, models.__file__ django.forms.models /Library/Python/2.6/site-packages/django/forms/models.pyc **跨度>

标签: python django satchmo


【解决方案1】:

DateFielddjango.db.models 中定义,不是django.forms.models。您还需要导入django.db.models

也许使用:

from django.db import models as db_models

formfield_overrides = {
    db_models.DateField: {
        'widget': AdminDateWidget,
        'input_formats': settings.VALID_DATE_FORMATS,
    },
}

【讨论】:

  • 我刚刚尝试过(以及在发布此问题之前的一些变体),我得到了同样的错误。
  • 更正!它确实有效。我有一个错字(已经完成:db_models.models.DateField)适用于您上面的内容。谢谢@Martijn!
  • 很高兴能帮上忙! :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
  • 2011-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多