2015-08-03 2 views
0

Использование: Django 1.8 и Python 3.4Уплотненного ManyToMany поля в 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 может иметь кратные часто задаваемые вопросы
  • Каждый FAQ может принадлежать нескольким центрам Spa
  • Каждый FAQ должен быть в нескольких языки поэтому в SpaCenterFAQLanguage модели сделок с языком перевода

Использование Django встроенный в интерфейс администратора Я хотел бы иметь возможность вводить все различные переводы часто задаваемые вопросы, находясь в интерфейсе SpaCenter администратора.

Поэтому в основном это вложенные отношения, и я отдаю себе отчет в этой теме:

Как и оба этих сообщества встроенных приложений, которые пытаются справиться с проблемой:

Тем не менее, я все еще пытаюсь понять, как определить это в Django Admin даже при использовании этих библиотек.

Нужна помощь в понимании того, как подобные отношения могут отображаться в интерфейсе администратора SPACenter.

Большое спасибо.

EDIT:

  • Модель SpaCenterFAQ не имеет поля из-за отдельный стол для обработки языков. Пример. Для одного спейсера может быть несколько часто задаваемых вопросов. Тем не менее, каждый из часто задаваемых вопросов должен быть на нескольких языках.

ответ

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 внешними ключами. Поэтому, если у Спацентра может быть несколько часто задаваемых вопросов, но в каждом FAQ может быть только 1 спа-центр, тогда ваш код будет правдой. Однако проблема в том, что многие из многих, поэтому я предполагаю, что где-то должен быть аргумент .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) 
Смежные вопросы