2009-02-20 3 views
1

У меня есть много отношений между публикацией и патологией. В каждой публикации может быть много патологий. Когда публикация появляется в шаблоне администратора, мне нужно уметь видеть множество патологий, связанных с этой публикацией. Вот эта модельная модель:admin template for manytomany

class Pathology(models.Model): 
    pathology = models.CharField(max_length=100) 
    def __unicode__(self): 
     return self.pathology 
    class Meta: 
     ordering = ["pathology"] 

class Publication(models.Model): 
    pubtitle = models.TextField() 
    pathology = models.ManyToManyField(Pathology) 
    def __unicode__(self): 
     return self.pubtitle 
    class Meta: 
     ordering = ["pubtitle"] 

вот admin.py. Я пробовал варианты следующего, но всегда получил ошибку, заявив, что публикация или патология не имеет внешнего ключа .

from myprograms.cpssite.models import Pathology 
class PathologyAdmin(admin.ModelAdmin): 
    # ... 
    list_display = ('pathology', 'id') 

admin.site.register(Pathology, PathologyAdmin) 

class PathologyInline(admin.TabularInline): 
    #... 
    model = Pathology 
    extra = 3 

class PublicationAdmin(admin.ModelAdmin): 
    # ... 
    ordering = ('pubtitle', 'year') 
    inlines = [PathologyInline] 
admin.site.register(Publication,PublicationAdmin) 

Благодарим за любую помощь.

ответ

0

Теперь я понимаю, что Django отлично подходит для администрирования (ввода данных) веб-сайта, простого поиска и наследования шаблонов, но Django и Python не очень хороши для сложных веб-приложений, где данные перемещаются назад и вперед между базы данных и html-шаблона. Я решил объединить Django и PHP, надеюсь, применяя сильные стороны обоих. Спасибо за помощь!

1

Если вы не используете промежуточную таблицу, как описано здесь http://docs.djangoproject.com/en/dev/ref/contrib/admin/#working-with-many-to-many-intermediary-models, я не думаю, что вам нужно создать класс Inline. Попробуйте удалить строку includes=[PathologyInline] и посмотреть, что произойдет.

+0

Да, я попытался удалить inlines = [PathologyInline] из PublicationAdmin и ничего не появляется. Промежуточная таблица просто не распознается администратором. Используя mysite.models import publish_pathology, я получаю сообщение об ошибке, которое говорит, что имя не распознается. – 2009-02-20 16:59:12

+0

Какова конкретная ошибка, которую вы получаете? Похоже, что у вас проблемы с импортом модулей в Python, у которых нет ничего для Django. Пример, приведенный выше, не имеет никакого смысла, потому что нет модуля с именем «публикация_патология». – user27478

+0

Публикация_патология - это промежуточная таблица, и теперь я понимаю, что ее нельзя вносить в admin.py, используя «импорт». Проблема заключается в том, что мои сотрудники по вводу данных не могут выбрать меню выпадающей патологии в записи публикации. Вместо этого я вижу весь список незаменимых патологий. – 2009-02-20 19:16:16

0

Это больше похоже на отношения «один ко многим», поэтому я не совсем понимаю, что такое Pathology. Кроме того, насколько я понимаю, Inlines не работают над многими пользователями. Это должно сработать, если вы переверните порядок моделей, удалите многоточие и добавьте поле ForeignKey в Publication in Pathology.

class Publication(models.Model): 
    pubtitle = models.TextField() 
    def __unicode__(self): 
     return self.pubtitle 
    class Meta: 
     ordering = ["pubtitle"] 

class Pathology(models.Model): 
    pathology = models.CharField(max_length=100) 
    publication = models.ForeignKey(Publication) 
    def __unicode__(self): 
     return self.pathology 
    class Meta: 
     ordering = ["pathology"]