Фильтрация модели заканчивается для администраторского поля выбора Django

Я только что начал играть с Django сегодня и до сих пор нахожу довольно трудным сделать простые вещи. С чем я борюсь, прямо сейчас фильтрует список типов состояния. Модель StatusTypes:

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'

На одной администраторской странице мне нужны все результаты, где тип = 0 и в другом, мне будут нужны все результаты, где тип = 1, таким образом, я не смогу только ограничить его из модели. Как я пошел бы о выполнении этого?

Править: Я должен был быть немного более ясным. У меня есть модель "Unit", которая имеет внешний ключ к к StatusTypes. Модели следующие:

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'

Таким образом, теперь на администраторской странице для модели единицы я хочу ограничить состояние только теми, которые имеют тип = 1. Базирующийся прочь lazerscience ответа ниже я попробовал следующий код:

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)

Но, это не изменило избранное поле вообще. Я также пытался печатать значение qs, и ничто не было произведено к моему терминалу, таким образом, я задаюсь вопросом, имею ли я некоторым как вызов queryset?

РЕДАКТИРОВАНИЕ 2: возможно, не было ясно, что я хочу отфильтровать это для состояния, выпадающего, который идет создать страница для модели Unit.

5
задан blcArmadillo 15 June 2010 в 21:04
поделиться

2 ответа

РЕДАКТИРОВАТЬ:

Оказывается, ModelAdmin.formfield_for_foreignkey был правильным ответом в этой ситуации: http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey

ПРЕДЫДУЩИЙ ОТВЕТ:

Взгляните на Атрибут list_filter в ModelAdmin . Для меня это больше похоже на то, что вы хотите, поскольку это создаст приятный интерфейс для фильтрации по различным критериям, а не произвольно ограничивает ваш набор запросов.

4
ответ дан 14 December 2019 в 13:26
поделиться

Вы можете переопределить queryset метод вашего MyModelAdmin класса:

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)

Этот админ будет отображать вам только те объекты вашей модели, которые имеют type=0!

2
ответ дан 14 December 2019 в 13:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: