2013-08-19 16 views
5

私は以下の問題があります。Djangoインラインモデル管理フィルター外部フィールド

私は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は取引がありません" – raratiru

1

私は問題を参照してください - self.instance.dealは編集モードで設定されていますが、追加モードでは設定されていません

私はあなたが書いたはずだと思います、

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

代わり

関連する問題