2013-10-22 88 views
3

我試圖找到一種方法來一次添加/編輯兩個模型。即:Django Admin一次編輯多個模型

class Desktop(models.Model): 
    #some field... 

    specs = models.ForeignKey(Specs) 

class Specs(models.Model): 
    cpu = models.CharField(max_length=200) 
    #and some other fields 

當我添加一個新的桌面時,我希望能夠同時添加規格。 使用普通的Django Admin,您將得到一個+符號,您可以添加ForeignKey的值。但是當你想在編輯桌面時編輯外鍵時,你不能這樣做。

更新! 我已經添加了以下內容:

class ServerInLine(admin.StackedInLine): 
    model = Server 
    extra = 1 
class SpecsManager(admin.ModelAdmin): 
    inlines = [ServerInLine] 

這使我能夠添加功能時添加的服務器。但實際上,我想在添加新服務器時添加規格。所以當我添加新的服務器或桌面時,我想添加規格。然後在服務器和臺式機的規格領域應該鏈接到充滿規格

+0

有沒有簡單的寫了,我可以給你向你展示如何做到這一點,但我會參考Django文檔。 https://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/ –

+0

你可以添加你的'admin.py'嗎? –

回答

2

在你的管理試試這個:

class DesktopInline(admin.StackedInline): 
    model = Desktop 
    extra = 1 


class SpecsAdmin(admin.ModelAdmin): 
    inlines = [DesktopInline,] 
admin.site.register(Specs, SpecsAdmin) 

看看the docs

+0

抱歉不說。我有需要規格的型號桌面。但我也想製作一個名爲服務器的模型,他需要規格。這就是爲什麼我爲Specs製作了一個模型。所以當人們想要添加桌面時,他們可以添加規格。當他們添加一個服務器時,他們也可以添加規格。 – RockIt

+0

你可以用服務器方式做到這一點我也一樣,詳情參見 – Armance

+1

的文檔在這個時刻我有以下幾點: 類ServerInLine(admin.StackedInLine): 模型=服務器 額外= 1 class SpecsManager(admin.ModelAdmin): inlines = [ServerInLine] 這使我可以在添加規格時添加服務器。但實際上,我想在添加新服務器時添加規格。所以當我添加新的服務器或桌面時,我想添加規格。服務器和桌面中的規格字段應該鏈接到填寫的規格。 感謝您的幫助。 – RockIt