2015-01-21 3 views
2

My Complete_Book 모델에 예약 할 외래 키가 있습니다. 책은 내가 설치된 앱 (즉, '외부 앱')에서 사용하고있는 것입니다. Complete_Book 관리자에게 직접 '책'을 편집/생성하고 싶습니다. 이것이 가능한가? 내 외래 키 관계가 인라인에서 허용하는 것에서 '거꾸로'있기 때문에 인라인을 사용할 수 없었습니다.Django 관리자의 인라인 표시를 통한 외래 키 객체 편집/추가

내 질문은이 질문에서 설명한 것과 동일하지만 (Django admin inline display but foreign key has opposite relation) 그 대답에서 제안한대로 내 모델을 리팩토링 할 수는 없습니다. 다른 방법이 있습니까? 도와 줘서 고마워!

models.py

class Complete_Book(models.Model): 
    topic = models.ForeignKey('topic') 
    book = models.ForeignKey(Book) 
    is_primary = models.BooleanField() 
    subprogram_name = models.CharField(max_length = 256, blank=True) 

class Book(models.Model): 
    title = models.CharField(max_length=512) 
    authors = models.CharField(max_length=2048) 
    year = models.PositiveIntegerField(max_length=4) 

답변

1

예,이 사실은 매우 간단합니다. 도서 용 ModelAdmin을 반드시 등록해야하며 관리자가 Complete_Book 관리자에게 + 버튼을 추가하여 새로운 도서를 만들 수 있도록하십시오.

+1

미안 해요, 난 할 수 있도록하려는 의미 clear-되지 않았습니다 동일한 창에서 바로 새 책 정보를 편집/추가하십시오. '+'를 클릭 한 다음 새 창으로 이동하고 싶지 않습니다. 서평 필드 (제목, 작성자, 연도)를 Complete_Book 필드에 올바르게 표시하고 싶습니다 ...? – steph

3

django_reverse_admin은 관계가 '잘못된'방향 인 인라인이 필요하다는 문제를 해결하기 위해 만든 장고 모듈입니다.

당신은 그것을 가져 다음 requirements.txt에 추가해야합니다 :

admin.py

from django_reverse_admin import ReverseModelAdmin 

class Complete_Book(ReverseModelAdmin): 
    # usual admin stuff goes here 
    inline_type = 'tabular' # or could be 'stacked' 
    inline_reverse = ['book'] # could do [('book', {'fields': ['title', 'authors'})] if you only wanted to show certain fields in the create admin 

admin.site.register(Book, Complete_Book)