2011-04-21 38 views
3

有很多的例子告訴你如何擴展用戶模型,但不必遵循「用戶我無法找到如何擴展現有的模型一個真實的,完整的和記錄例如配置文件模式「(老實說,我不知道爲什麼)。Django的:如何擴展現有的模型

總之,我的使用情況如下:我需要延長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 /管理/ sites.py」, 線78,寄存器 提高AlreadyRegistered( '該模型%s已註冊的' % 模型。

因此,有人建議我必須取消註冊該對象並註冊。

我做了這樣的:

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) 

沒有錯誤,但這次有沒有變化,我的自定義字段是無處可見。

任何提示?

+0

您的模型子類是否添加新的數據庫字段?如果沒有,你可以看看代理模式:http://lincolnloop.com/blog/2010/dec/16/using-proxy-models-customize-django-admin/ – arie 2011-04-21 08:15:54

+0

是的,我這樣做是爲了增加字段 – simahawk 2011-04-21 10:59:11

+0

我正面臨與Django時間表相同的問題。 :/ – 2011-06-03 23:28:09

回答

2

之所以很難是因爲object-relational impedance mismatch(愛語)的。對象和類做地圖完美到關係型數據庫:像Django的企圖平滑邊緣的OR​​M,但也有一些地方的差異僅僅是太大。繼承是其中之一:沒有辦法讓一個表從另一個表「繼承」,所以它必須通過外鍵等來模擬。

無論如何,你實際的問題,我真的不能看到發生了什麼事情,但一個可能的方式來解決這將是繼承ProductAdmin的歡迎,並專門設置了model屬性的子類的模型。

+0

嗨,我做了這個http://pastebin.com/4reDRJKH但沒有改變:( – simahawk 2011-04-21 10:58:32