Ho appena iniziato a giocare con Django oggi e finora trovo piuttosto difficile fare le cose semplici. Ciò di cui sto combattendo in questo momento sta filtrando un elenco di tipi di stato. Il modello è StatusTypes:Filtraggio dei risultati del modello per la casella di selezione admin di Django
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'
In una pagina di amministrazione ho bisogno di tutti i risultati dove tipo = 0 e in un altro avrò bisogno di tutti i risultati dove tipo = 1 quindi non posso solo limitare dall'interno della modello. Come potrei fare questo?
MODIFICA: Avrei dovuto essere un po 'più chiaro. Ho un modello "Unit" che ha una chiave straniera per StatusTypes. I modelli sono i seguenti:
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'
Così ora nella pagina di amministrazione per il modello unità voglio limitare lo stato di solo quelli con type = 1. In base al largo di risposta lazerscience qui sotto ho provato il seguente codice:
from inv.inventory.models import Unit
from django.contrib import admin
class UnitAdmin(admin.ModelAdmin):
def queryset(self, request):
qs = super(UnitAdmin, self).queryset(request)
return qs.filter(type=0)
admin.site.register(Unit, UnitAdmin)
Tuttavia, non ha modificato affatto la casella di selezione. Ho anche provato a stampare il valore di qs e nulla è stato emesso sul mio terminale quindi mi chiedo se devo sapere come chiamare queryset?
EDIT 2: Potrebbe non essere chiaro che voglio filtrarlo per il menu a discesa dello stato che si trova nella pagina di creazione per il modello Unità.
Grazie per la risposta.List_filter non funzionerà perché non puoi avere un'unità con uno stato di tipo = 0 e, a meno che non mi sbagli, list_filter aggiunge solo una barra laterale che offre all'utente l'opzione. Sono piuttosto sorpreso che sia così difficile da fare ... almeno non sono ancora riuscito a trovare una risposta. Tutto quello che voglio essenzialmente fare è aggiungere 'WHERE part = 1' alla query. – blcArmadillo
Forse mi manca il punto su quello che vuoi, ma se aggiungi 'status' all'elenco' list_filter', ti darà un widget che ti permette di filtrare in base a qualsiasi valore consentito per quel campo. Funziona aggiungendo un parametro get all'URL di amministrazione, esattamente come quello che ti serve. –
Gabriel, ho appena capito quale potrebbe essere la confusione. Voglio filtrare i tipi di stato per il campo di selezione dello stato nella pagina di aggiunta. Non aggiungere una colonna di filtri all'elenco delle Unità che sono già state aggiunte. Questo aiuta a chiarire le cose? – blcArmadillo