Я только что начал играть с 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.
РЕДАКТИРОВАТЬ:
Оказывается, ModelAdmin.formfield_for_foreignkey был правильным ответом в этой ситуации: http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey
ПРЕДЫДУЩИЙ ОТВЕТ:
Взгляните на Атрибут list_filter в ModelAdmin . Для меня это больше похоже на то, что вы хотите, поскольку это создаст приятный интерфейс для фильтрации по различным критериям, а не произвольно ограничивает ваш набор запросов.
Вы можете переопределить 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
!