2013-08-19 25 views
5

Aşağıdaki bir sorunum var.Django Inline Model Yönetici filtresi Yabancı alan

Ben 3 modelleri var:

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) 

ben Sitesi & Resim satır içi yönetici modelleri ile Deal Yönetici yapmak istiyorum: Ben in Picture Siteyi seçiyorum zaman

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


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


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

Ne yapmak istediğim admin, sadece görüntülediğim geçerli Anlaşmaya ait olduğum siteleri gösterir (eğer bir güncelleme yapılamıyorsa - yeni bir tane oluşturmuyorsa). Bu yönetici çalışmak istiyorum

, ben web'de arama kaç saat geçirdim ama yararlı bir şey bulamadı, lütfen yardım!

ben bu şekilde yapmaya çalışıyordu ama anlaşma kimliği almak için ebeveyn modeli örneği erişmek nasıl bilmiyorum: DTing en varyantta

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) 

cevap

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

'sınıf PictureInline (admin.ModelAdmin):' Bu doğru? '' 'Biz hata' '' resmi hiçbir anlaşması var olsun: '' 'sınıf PictureInline (admin.StackedInline) için' '' form = PictureInlineForm''' eklerken onu oluşturma ve resim ile kayıt, hiçbir sonuç verir .''' – raratiru

1

Sorunu görüyorum - self.instance.deal düzenleme modunda ayarlandı, ancak

eklendiğinde sanırım,

yazmalısınız.
try:   
    self.fields['site'].queryset = Site.objects.filter(deal=self.instance.deal) 
except: 
    self.fields['site'].queryset = Site.objects 

yerine

İlgili konular