2010-06-15 14 views
5

Ben sadece bugün Django ile oynamaya başladım ve şu ana kadar basit şeyler yapmakta zorlanıyorum. Şu anda uğraştığım şey, durum türlerinin bir listesini filtrelemek. StatusTypes modelidir:Django yönetici için filtreleme modeli sonuçları seçme kutusu

class StatusTypes(models.Model): 
    status = models.CharField(max_length=50) 
    type = models.IntegerField() 
    def __unicode__(self): 
     return self.status 
    class Meta: 
     db_table = u'status_types' 

bir yönetici sayfasında tüm sonuçları gereken yere type = 0 diğerinde ben type = 1 yüzden sadece içinden bunu sınırlayamaz Tüm sonuçları gerekir modeli. Bunu yapmak için nasıl giderim?

EDIT: Biraz daha açık olmalıydım. StatusTypes için bir yabancı anahtarı olan bir model "Unit" var.

class StatusTypes(models.Model): 
    status = models.CharField(max_length=50) 
    type = models.IntegerField() 
    def __unicode__(self): 
     return self.status 
    class Meta: 
     db_table = u'status_types' 

class Unit(models.Model): 
    name = models.CharField(unique=True, max_length=50) 
    status = models.ForeignKey(StatusTypes, db_column='status') 
    note = models.TextField() 
    date_added = models.DateTimeField() 
    def __unicode__(self): 
     return self.name 
    class Meta: 
     db_table = u'units' 

Yani şimdi ünite modeli için yönetici sayfanızda aşağıdaki kodu çalıştı aşağıdaki I lazerscience yanıtının kapalı göre type = 1. yalnızca olanlara durumunu sınırlamak istiyorum: şu şekildedir: modellerdir

( )

Ancak, seçim kutusunu hiç değiştirmedi. Ayrıca qs değerini yazdırmayı denedim ve terminalime hiçbir şey gönderilmediysem, bu yüzden bazı soruların queryset'i çağırmam gerekip gerekmediğini merak ediyorum.

DÜZENLEME 2: Bunu, Birim modeli için oluşturma sayfasındaki durum açılır menüsüne göre filtrelemek istediğim net olmayabilir.

cevap

3

DÜZENLEME: http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey

ÖNCEKİ YANIT:

list_filter attribute of ModelAdmin bir göz atın

O ModelAdmin.formfield_for_foreignkey bu durumda doğru cevap olduğu ortaya çıktı. İstediğiniz gibi daha çok kulağa hoş geliyor çünkü bu, sorgulayıcılarınızı rasgele kısıtlamaktan ziyade farklı kriterlere göre filtreleme yapmak için güzel bir arayüz oluşturacaktır.

+0

Yanıt için teşekkürler.List_filter çalışmayacak çünkü tip = 0 statüsüne sahip bir üniteniz olamaz ve yanılmıyorsam list_filter seçeneği kullanıcıya bir kenar çubuğu ekler. Bunu yapmak çok zor bir şeydi, en azından henüz bir cevap bulamadım. Tüm yapmak istediğim, 'WHERE part = 1' sorgusuna eklemek. – blcArmadillo

+0

Belki de ne istediğinizi kaçırıyorum, ancak 'list_filter 'listesine' status' eklerseniz, bu alan için izin verilen değerlere göre filtrelemenizi sağlayan bir widget verecektir. İhtiyacınız olan şey gibi, yönetici URL'ye get parametresi ekleyerek çalışır. –

+0

Gabriel, Sadece karışıklığın ne olabileceğini anladım. Ekleme sayfasındaki durum seçim alanı için durum tiplerini filtrelemek istiyorum. Önceden eklenmiş olan Birimler listesine bir filtre sütunu eklemeyin. Bu, şeyleri açıklığa kavuşturmaya yardımcı olur mu? – blcArmadillo

2

Sen MyModelAdmin sınıfının queryset yöntemi geçersiz kılabilirsiniz:

from django.contrib import admin 

class MyModelAdmin(admin.ModelAdmin): 

    def queryset(self, request): 
     qs = super(MyModelAdmin, self).queryset(request) 
     return qs.filter(type=0) 

admin.site.register(StatusTypes, MyModelAdmin) 

Bu yönetici sadece size type=0 sahip Modelinizin nesneleri görüntüler!

+0

Yardımlarınız için teşekkürler. Cevap verdikten sonra, ne sorduğumdan tam olarak ne yapmam gerektiğinden bu konuda daha fazla bilgi vermeliydim. Ben kodumu değiştirmek için benim ihtiyaçlar yanı sıra queryset overriding üzerinde birkaç kaynak arama suite değiştirmeye çalıştım. Qs değerini yazdırmaya çalıştım ama terminalime hiçbir şey çıkmadı. Bir şekilde queryset'i çağırmalı mıyım? – blcArmadillo

+0

Sorgunuzu şu şekilde filtrelemelisiniz: qs.filter (status__type = 0) '. Sonunda bir açılır kapanıştan bahsediyorsun, bununla ne demek istiyorsun? Ve evet, kaydettiğiniz bir şey olduğu sürece, queryset'inizde bir şey görmelisiniz. Myapp.models import Unit', 'Unit.objects.filter (status__type = 0)' den 'python manage.py shell' deneyi deneyin; bununla biraz oynayın! –

+0

Yardım için teşekkürler. Buna bakacağım. – blcArmadillo