2015-08-03 49 views
0

使用:Django的1.8和Python 3.4嵌套多對多場在Django

我有以下型號:

class SpaCenter(models.Model): 
    name = models.CharField(max_length=100) 
    website = models.CharField(max_length=200) 
    facebook_url = models.CharField(max_length=200) 
    faq = models.ManyToManyField(SpaCenterFAQ) 


class SpaCenterFAQ(models.Model): 
    pass 


class SpaCenterFAQLanguage(models.Model): 
    faq = models.ForeignKey(SpaCenterFAQ) 
    faq_language = models.CharField(max_length=2, 
         choices=LANGUAGE_CHOICES, 
         default=ENGLISH) 
    faq_question = models.CharField(max_length=200) 
    faq_answer = models.TextField() 

總結:

  • 每個SpaCenter可以multipe常見問題
  • 每個FAQ都可以屬於多個Spa中心
  • 每個FAQ都需要在多個語言,因此SpaCenterFAQL語言模型處理語言翻譯

使用Django內置管理界面我希望能夠在SpaCenter管理界面中輸入常見問題解答的所有不同翻譯。

所以基本上這是一個嵌套的關係,我知道這個線程:

除了這兩個試圖解決這個問題,這些社區創建的應用程序的:

但是,我仍然在努力瞭解如何在Django Admin中定義這一點,即使在使用這些庫時也是如此。

需要幫助瞭解這種關係如何顯示在SpaCenter的管理界面中。

非常感謝。

編輯:

  • 的SpaCenterFAQ模型沒有因爲處理語言附表的領域。例如:一個spacenter可以有幾個常見問題解答。但是,每個FAQ都需要使用多種語言。

回答

1

使用djangosuperlines它應該看起來像:

from django.contrib.admin import TabularInline, StackedInline, site 
from super_inlines.admin import SuperInlineModelAdmin, SuperModelAdmin 

from .models import * 


class SpaCenterFAQLanguageInlineAdmin(SuperInlineModelAdmin, TabularInline): 
    model = SpaCenterFAQLanguage 


class SpaCenterFAQInlineAdmin(SuperInlineModelAdmin, StackedInline): 
    model = SpaCenter 
    inlines = (SpaCenterFAQLanguageInlineAdmin,) 


class SpaCenterAdmin(SuperModelAdmin): 
    inlines = (SpaCenterFAQInlineAdmin,) 


site.register(SpaCenter, SpaCenterAdmin) 
+0

對不起,jumpted定論爲時尚早 - 這個工作對我的模型的另一部分,其中有2個外鍵關係。因此,如果一個SpaCenter可以有多個常見問題解答,但每個常見問題解答只能有一個水療中心 - 那麼您的代碼就是事實。 但是,這裏的問題是多對多,所以我假設某處必須有一個.through參數 – Aivoric

+0

model = SpaCenter.faq.through – delta32

+0

,這是行不通的... – Aivoric

0
from django.db import models 

class SpaCenter(models.Model): 
    name = models.CharField(max_length=100) 
    website = models.CharField(max_length=200) 
    facebook_url = models.CharField(max_length=200) 
    faqs = models.ManyToManyField('SpaCenterFAQ', blank=True) 


class SpaCenterFAQ(models.Model): 
    spa_centers = models.ManyToManyField('SpaCenter', blank=True) 

class SpaCenterFAQLanguage(models.Model): 
    ENGLISH = '1' 
    LANGUAGE_CHOICES = ((ENGLISH, 'english'),) 

    faq = models.ForeignKey(SpaCenterFAQ) 
    faq_question = models.CharField(max_length=200) 
    faq_answer = models.TextField() 
    faq_language = models.CharField(max_length=2, 
         choices=LANGUAGE_CHOICES, 
         default=ENGLISH 


from django.contrib import admin 

from .models import * 


class SpaCenterFAQLanguageInlineAdmin(admin.TabularInline): 
    model = SpaCenterFAQLanguage 

class SpaCenterFaqAdmin(admin.ModelAdmin): 
    inlines = SpaCenterFAQLanguageInlineAdmin, 


class SpaCenterAdmin(admin.ModelAdmin): 
    pass 

admin.site.register(SpaCenter, SpaCenterAdmin) 
admin.site.register(SpaCenterFAQ, SpaCenterFaqAdmin)