Je viens de commencer à jouer avec Django aujourd'hui et jusqu'à présent, je trouve qu'il est plutôt difficile de faire des choses simples. Ce à quoi je me bats en ce moment, c'est de filtrer une liste de types d'états. Le modèle StatusTypes est:Filtrer les résultats du modèle pour Django admin select box
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'
Dans une page d'admin j'ai besoin tous les résultats où type = 0 et dans un autre, je vais avoir besoin de tous les résultats où type = 1 donc je ne peux pas limiter juste à l'intérieur du modèle. Comment ferais-je cela?
EDIT: J'aurais dû être un peu plus clair. J'ai un modèle "Unit" qui a une clé étrangère à StatusTypes. Les modèles sont les suivants:
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'
Alors maintenant, dans la page d'administration pour le modèle de l'unité que je veux limiter le statut que ceux de type = 1. Sur la base de la réponse de lazerscience ci-dessous j'ai essayé le code suivant:
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)
Mais, cela n'a pas du tout changé la case de sélection. J'ai également essayé d'imprimer la valeur de qs et rien n'a été sorti sur mon terminal, donc je me demande si je dois un peu comment appelez le jeu de requête?
EDIT 2: Il n'est peut-être pas clair que je souhaite filtrer cela pour la liste déroulante d'état qui se trouve sur la page de création du modèle d'unité.
Merci pour la réponse.List_filter ne fonctionnera pas car vous ne pouvez pas avoir une unité avec un statut de type = 0 et à moins que je ne me trompe, list_filter ajoute simplement une barre latérale donnant l'option à l'utilisateur. Je suis un peu surpris que ce soit si difficile à faire ... au moins, je n'ai pas encore trouvé de réponse. Tout ce que je veux essentiellement faire, c'est ajouter 'WHERE part = 1' à la requête. – blcArmadillo
Peut-être que je manque le point sur ce que vous voulez, mais si vous ajoutez 'status' à la liste' list_filter', cela vous donnera un widget qui vous permet de filtrer en fonction des valeurs autorisées pour ce champ. Il fonctionne en ajoutant un paramètre get à l'URL d'administration, exactement comme vous le souhaitez. –
Gabriel, je viens de réaliser ce que pourrait être la confusion. Je veux filtrer les types d'état pour le champ de sélection d'état sur la page d'ajout. Ne pas ajouter une colonne de filtre à la liste des unités qui ont déjà été ajoutées. Cela aide-t-il à clarifier les choses? – blcArmadillo