2013-08-19 6 views
5

다음과 같은 문제가 있습니다.장고 인라인 모델 관리자 필터 해외 필드

나는 3 개 모델을 가지고 :

class Deal(models.Model): 
    name = models.CharField(max_length=80) 

class Site(models.Model): 
    name = models.CharField(max_length=80) 
    deal = models.ForeignKey(Deal) 

class Picture(models.Model): 
    title = models.CharField(max_length=80) 
    deal = models.ForeignKey(Deal) 
    site = models.ForeignKey(Site) 

내가 사이트 & 사진 인라인 관리 모델에 거래 관리를 만들고 싶어 : 나는 그림에서 사이트를 선택하고 때

class SiteInline(admin.StackedInline): 
    model = Site 
    extra = 1 


class PictureInline(admin.StackedInline): 
    model = Picture 
    extra = 1 


class DealAdmin(admin.ModelAdmin): 
    inlines = [ 
     SiteInline, 
     PictureInline, 
    ] 

는 내가하고 싶은 것은 관리자는 내가 현재 거래하고있는 사이트 만 표시합니다 (메신저를 업데이트하는 경우 - 새로 만들지는 않음).

관리자가이 기능을 사용하려면 웹 검색에 많은 시간을 할애했지만 유용한 정보를 찾을 수 없습니다.

나는 이런 식으로 일을하려고했지만, 내가 거래 ID를 얻기 위해 상위 모델 인스턴스에 액세스하는 방법을 모른다 : DTing의 변형에서

def formfield_for_foreignkey(self, db_field, request=None, **kwargs): 

    if db_field.name == 'site': 
     kwargs['queryset'] = Site.objects.filter(deal__id=1) 

    return super(PictureInline, self).formfield_for_foreignkey(db_field, request=None, **kwargs) 

답변

0

Django: accessing the model instance from within ModelAdmin?

class PictureInlineForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(PictureInlineForm, self).__init__(*args, **kwargs) 
     self.fields['site'].queryset = Site.objects.filter(
      deal=self.instance.deal) 

class PictureInline(admin.ModelAdmin): 
    form = PictureInlineForm 
+0

'''클래스 PictureInline (admin.ModelAdmin) :'''이 정확합니까? PictureInline (admin.StackedInline) 클래스에'''form = PictureInlineForm''을 추가하는 동안 아무런 결과도 얻지 못합니다 :'''우리는 오류'''를 얻습니다 Picture has no deal ''' – raratiru

1

을 문제가 보입니다 - self.instance.deal이 편집 모드로 설정되어 있지만 추가 모드에서 설정되지 않았습니다.

try:   
    self.fields['site'].queryset = Site.objects.filter(deal=self.instance.deal) 
except: 
    self.fields['site'].queryset = Site.objects 

대신

관련 문제