2013-05-23 2 views
1

Один из моих запросов внезапно начал сбой после внесения некоторых изменений в AdminModel.list_filter, запускающий FieldError

После поиска немного, я обнаружил, что добавление list_filter к моему admin_model является создание FieldError, который, кажется, действительно странно для меня ...

Мои модели:

class PiafInfo(models.Model): 
    no = models.IntegerField(u'No du Piaf', unique=True) 
    origin_city = models.ForeignKey(City) 
    ... 

class PiafInfoAdmin(admin.ModelAdmin): 
    list_display = ('no', 'origin_city', 'group', 'fleet') 
    list_filter = ['origin_city', ] 
    ordering = ('no',) 
    search_fields = ('no', 'group', 'fleet') 
admin.site.register(PiafInfo, PiafInfoAdmin) 

class PiafTrans(models.Model): 
    ttype   = models.IntegerField(choices=TTYPE_CHOICES, default=TTYPE_RELOAD) 
    date   = models.DateTimeField() 
    piafSerial = models.ForeignKey(PiafInfo) 
    ... 

class PiafTransAdmin(admin.ModelAdmin): 
    list_display = ('date', 'piafSerial', 'city', 'ttype', 'amount', 'subscrName') 
    date_hierarchy = 'date' 
    list_filter = ('city', 'ttype') 
    search_fields = ('piafSerial', 'group', 'fleet', 'subscrName') 
admin.site.register(PiafTrans, PiafTransAdmin) 

Запрос создает проблемы (вторая линия):

piafInfos = models.PiafInfo.objects.all().distinct() 
piafInfos = piafInfos.filter(piaftrans__date__range=(startDate,endDate)).distinct() 

Как это, я получаю следующее сообщение об ошибке:

FieldError: Cannot resolve keyword 'piaftrans' into field. Choices are: fleet, group, id, no, origin_city 

Он пытается интерпретировать piaftrans как имя поля вместо модели.

Если я комментирую одну строку в PiafInfoAdmin:

class PiafInfoAdmin(admin.ModelAdmin): 
    list_display = ('no', 'origin_city', 'group', 'fleet') 
    # list_filter = ['origin_city', ] 
    ordering = ('no',) 
    search_fields = ('no', 'group', 'fleet') 

admin.site.register(PiafInfo, PiafInfoAdmin) 

ошибка исчезает. Я не вижу никакой корреляции между ошибкой и изменением, которое я сделал!

Это с django 1.3 и Python 2.7 на Windows.

+0

Я удалил свой ответ. Не прочитал ваш вопрос с достаточным вниманием. Сожалею. –

+0

Не уверен в вашей ошибке, но ваш первый 'piafInfos = models.PiafInfo.objects.all(). Distinct()' кажется лишним, поскольку вы можете комбинировать два вызова и использовать только один. Попробуйте использовать 'models.PiafInfo.objects.filter (piaftrans__date__range = (startDate, endDate)) .distinct()' – circuitBurn

+0

Я сделаю еще несколько тестов с разными версиями, чтобы узнать, всплывает ли что-нибудь. –

ответ

0

Невозможно воспроизвести здесь. Использование models.py:

class City(models.Model): 
    name = models.CharField(max_length=110) 

class PiafInfo(models.Model): 
    no = models.IntegerField(u'No du Piaf', unique=True) 
    origin_city = models.ForeignKey(City) 

class PiafTrans(models.Model): 
    ttype   = models.IntegerField() 
    date   = models.DateTimeField() 
    piafSerial = models.ForeignKey(PiafInfo) 

admin.py:

class PiafInfoAdmin(admin.ModelAdmin): 
    list_display = ('no', 'origin_city',) 
    list_filter = ['origin_city', ] 
    ordering = ('no',) 
    search_fields = ('no',) 
admin.site.register(PiafInfo, PiafInfoAdmin) 

class PiafTransAdmin(admin.ModelAdmin): 
    list_display = ('date', 'piafSerial', 'ttype',) 
    date_hierarchy = 'date' 
    list_filter = ('ttype') 
    search_fields = ('piafSerial',) 
admin.site.register(PiafTrans, PiafTransAdmin) 

Джанго 1.3.8 пре-альфа (последняя из 1,3 филиала)

и следующий код:

startDate = datetime.today() 
endDate = datetime.today() 
piafInfos = PiafInfo.objects.all().distinct() 
piafInfos = piafInfos.filter(piaftrans__date__range=(startDate,endDate)).distinct() 
Смежные вопросы