Django:如何扩展现有模型

3

有很多例子可以告诉你如何扩展用户模型,但我找不到一个真正的、完整的、记录完备的例子来说明如何在不必遵循“用户配置文件模式”(老实说我想知道为什么)的情况下扩展现有模型。

简而言之,我的用例如下:我需要扩展Django-lfs的产品模型。

在LFS中,它是这样注册的(在lfs.catalog.admin中):

from django.contrib import admin

[...]
from lfs.catalog.models import Product
[...]
class ProductAdmin(admin.ModelAdmin):
    prepopulated_fields = {"slug": ("name", )}
admin.site.register(Product, ProductAdmin)
[...]

我试图注册我的(它的子类),但是我得到了以下错误:

django/contrib/admin/sites.py", line 78, in register raise AlreadyRegistered('The model %s is already registered' % model.name)

于是,有人建议我必须注销该对象并注册我的。

我像这样做:

from lfs.catalog.models import Product
from lfs.catalog.admin import ProductAdmin

admin.site.unregister(Product)

from lfs_product_highlights.catalog.models import Product

admin.site.register(Product,ProductAdmin)

这次没有错误,但是没有变化,我的自定义字段仍然不可见。有什么提示吗?

你的模型子类是否添加了新的数据库字段?如果没有,你可以看一下代理模型:http://lincolnloop.com/blog/2010/dec/16/using-proxy-models-customize-django-admin/ - arie
是的,我正在这样做以添加字段。 - simahawk
1个回答

3
由于对象关系阻抗不匹配(喜欢这个短语),这就是为什么它很难。对象和类不能完美地映射到关系型数据库:像Django的ORM这样的工具试图平滑这些差异,但有些地方的差异太大了。继承是其中之一:没有办法让一个表从另一个表“继承”,所以必须通过外键或类似方式来模拟。
无论如何,对于您实际的问题,我无法看到发生了什么,但解决方法可能是将ProductAdmin作为子类,并特别将model属性设置为您的子类模型。

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