2013-05-05 131 views
2

我试图扩展Satchmo/Django中的管理定义,并得到错误“属性错误'模块'对象没有属性'DateField'”试图添加一个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)领域产生了同样的错误。

任何想法,我应该看看解决这个问题?

+0

什么'打印模式.__ name__,模型.__ file__'打印?你有太多的'import *'语句来对你在这里输入的内容做出更明智的判断。 – 2013-05-05 16:43:53

+0

它显示了这一点:django.forms.models /Library/Python/2.6/site-packages/django/forms/models.pyc – 2013-05-05 17:26:17

+0

而'print'语句在'formfield_overrides'行之前执行? – 2013-05-05 17:27:20

回答

1

DateField定义于django.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, 
    }, 
} 
+0

我刚刚尝试过(以及发布此问题之前的一些变体),并且我得到相同的错误。 – 2013-05-05 17:44:48

+0

正确!它确实在起作用。我有一个错字(已完成:** db_models.models.DateField **)与上面的内容一起工作。谢谢@Martijn! – 2013-05-05 17:47:14

+0

很高兴能有帮助! :-) – 2013-05-05 17:58:35

相关问题