2014-05-09 1 views
0

두 모델이 있습니다. 첫 번째 모델에는 사용자 필드와 파일 필드 (파일에 대한 주소)가 있습니다. 한 사용자에 대해 하나의 파일 일 수 있습니다. 두 번째 모델은 동일하지만 보관 된 파일 일종입니다. 따라서 한 사용자가 여러 파일을 사용할 수 있습니다.다른 모델의 정보를 관리자 편집 페이지에 추가하는 방법

관리자에게 추가하려는 첫 번째 모델 페이지 동일한 사용자에 대한 두 번째 모델의 보관 된 파일 링크 목록. 어떻게 할 수 있습니까? 가장 좋은 방법은 무엇입니까? 관리자 모델 템플릿 및보기를 다시 정의해야합니까?

예 :

사용자 - 이름

파일 - 링크는 내가 장고 관리 편집 페이지

아카이브 파일의 상자에서 그것을 가지고 < < < < < < < < < <을 파일로 : < < < < < < < < < 내가 N을 제기

...

링크를을 file2에 보관 된 파일을

링크 링크

파일 1에 링크의 목록을 추가 할

UPD : 내 모델은 다음과 같습니다 :

class UserFile(models.Model): 
    user = models.ForeignKey(User) 
    file = PrivateImageField(...) 

class ArchivedUserFile(models.Model): 
    user = models.ForeignKey(User) 
    file = PrivateImageField(...) 
+0

인라인을 사용할 수 있습니까? –

+0

내가 슬퍼 할 때, 내 두 번째 모델 (아카이브)에는 첫 번째 모델에 ForeignKey가 없다. – Alex

답변

0

장고의 인라인 관리자를 사용하고 싶습니다. 표 형식의 인라인은 사용하기가 쉽고 기능이 완벽합니다.

그래서이 코드에 대한

: 당신은 저자를 관리하기 위해이 관리자를 등록 할 수 있습니다

from django.db import models 

class Author(models.Model): 
    name = models.CharField(max_length=100) 

class Book(models.Model): 
    author = models.ForeignKey(Author) 
    title = models.CharField(max_length=100) 

, 그리고 책들이 생성 :

from django.contrib import admin 

class BookInline(admin.TabularInline): 
    model = Book 

class AuthorAdmin(admin.ModelAdmin): 
    inlines = [ 
     BookInline, 
    ] 

이 관리자를 등록하는 것을 잊지 마세요

from django.contrib import admin 
admin.site.register(Author, AuthorAdmin) 

나는이 모든 것을 가지고있다.

https://docs.djangoproject.com/en/dev/ref/contrib/admin/#inlinemodeladmin-objects

또는

그냥 스스로를 관리하려면, 당신은 템플릿을 편집 할 수 있습니다. iterator/QuerySet을 컨텍스트에 넣으면 잊어 버릴 수 있습니다.

문서를 참조하십시오.

https://docs.djangoproject.com/en/1.5/ref/contrib/admin/#custom-template-options

https://docs.djangoproject.com/en/1.5/ref/contrib/admin/#overriding-admin-templates 하고 admin.ModelAdmin에 change_view 방법 오버라이드 (override) : 여기 인라인을 사용할 수없는 이유가

def change_view(self, request, object_id, form_url='', extra_content=None): 
    // Set up vars 
    context = {'things': list_of_things} 

    return super(AuthorAdmin, self).change_view(request, object_id, form_url, context) 
+0

인라인 메서드를 사용하고 싶지만 할 수 없습니다. 귀하의 예제에서는 두 모델 사이의 외래 키 링크가, 나의 모델은 다음과 같습니다 클래스 userfile로 (models.Model) : 사용자 = models.ForeignKey (사용자) 파일 = PrivateImageField (...) 클래스 ArchivedUserFiles (models.Model) : 곧 ... – Alex

+0

어떻게 같은 서로 다른 응용 프로그램에서 인라인을 혼합 할 두 번째 방법을 시도 할 것이다 사용자 = models.ForeignKey (사용자) 파일 = PrivateImageField (...) 모델. 예를 들어 사용자 모델은 다른 앱에서 많은 관계를 가질 수 있으며 모두 인라인을 추가해야합니까? – Alex

0

없습니다입니다. 주요 걸림돌은 User 모델이 관리자에게 자동으로 등록된다는 것입니다. ModelAdmins를 다음과 같이 설정하십시오.

... 
from django.contrib.auth import User 
... 


class UserFileInline(admin.TabularInline): 
    model = UserFile 


class ArchivedUserFileInline(admin.TabularInline): 
    model = ArchivedUserFile 


class UserAdmin(admin.ModelAdmin): 
    inlines = (
     UserFileInline, 
     ArchivedUserFileInline, 
    ) 


# Unregister User from the admin and re-register with our ModelAdmin 
admin.site.unregister(User) 
admin.site.register(User, UserAdmin) 

이제 사용자 관리에서 파일을 재생할 수 있습니다.

+0

을 게시 oroginal 업데이트 –

관련 문제