簡體   English   中英

在Django中嵌套ManyToMany字段

[英]Nested ManyToMany Field in Django

使用:Django 1.8和Python 3.4

我有以下模型:

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都可以有多個常見問題解答
  • 每個常見問題可以屬於多個水療中心
  • 每個FAQ需要使用多種語言,因此SpaCenterFAQLanguage模型可以處理語言翻譯

使用Django內置的管理界面,我希望能夠在SpaCenter管理界面中為FAQ輸入所有不同的翻譯。

所以本質上這是一個嵌套關系,我知道這個線程:

以及這兩個社區構建的嘗試解決該問題的應用程序:

但是,即使使用這些庫,我仍在努力了解如何在Django Admin中定義它。

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

非常感謝。

編輯:

  • 由於有用於處理語言的單獨表格,因此SpaCenterFAQ模型沒有字段。 示例:一個spacenter可能有一些常見問題解答。 但是,每個常見問題解答都需要使用多種語言。

使用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)
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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM