2009-11-16 3 views
2

У меня есть устаревшая база данных со столами для документов и авторов. Третья таблица определяет упорядоченное много-много отношений между документами и авторами, используя внешние ключи к документам и авторам и целое число, чтобы указать заказ автора для данного документа.Django заказал ManyToManyField в интерфейсе администратора

Использование Django 1.1.1 (или SVN), есть ли способ редактировать авторов документа и их порядок на странице администратора?

ответ

4

Это быстро и немного грубо, но оно должно быть близко (r).

from django.db import models 
from django.contrib import admin 

class Document(models.Model): 
    name = models.CharField(max_length = 128) 

    def __unicode__(self): 
     return self.name 

class Author(models.Model): 
    name = models.CharField(max_length = 128) 
    document = models.ManyToManyField(Document, through = 'Foo') 

    def __unicode__(self): 
     return self.name 

class Foo(models.Model): 
    document = models.ForeignKey(Document) 
    author = models.ForeignKey(Author) 
    author_order = models.IntegerField() 

class FooInline(admin.TabularInline): 
    model = Foo 

class DocumentAdmin(admin.ModelAdmin): 
    inlines = [ FooInline ] 

admin.site.register(Author) 
admin.site.register(Document, DocumentAdmin) 

http://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany http://docs.djangoproject.com/en/dev/ref/contrib/admin/#inlinemodeladmin-objects

+0

Я пробовал это раньше, но только одна строка/запись автора появляется для редактирования на странице администрирования документа, даже если я укажу extra = 3 в классе FooInline. –

+0

Я только что протестировал это (w/1.1.1) и имел возможность первоначально приложить 3 авторов при добавлении нового документа и еще 3 при редактировании документа. Не уверен, где он может падать для вас, но мне показалось, что это отлично работает. –

+0

Из любопытства вы попробовали inspectdb, чтобы посмотреть, какие представления моделей вы получаете (http://docs.djangoproject.com/en/dev/ref/django-admin/#inspectdb). –

0

это может помочь вам тоже - there is some utility в Django для создания моделей для унаследованных баз данных.

Я создал модель для базы данных mediawiki, используя ее. Это почти все правильно, но вам нужно немного подстроить модели.

Смежные вопросы