Один из моих запросов внезапно начал сбой после внесения некоторых изменений в 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.
Я удалил свой ответ. Не прочитал ваш вопрос с достаточным вниманием. Сожалею. –
Не уверен в вашей ошибке, но ваш первый 'piafInfos = models.PiafInfo.objects.all(). Distinct()' кажется лишним, поскольку вы можете комбинировать два вызова и использовать только один. Попробуйте использовать 'models.PiafInfo.objects.filter (piaftrans__date__range = (startDate, endDate)) .distinct()' – circuitBurn
Я сделаю еще несколько тестов с разными версиями, чтобы узнать, всплывает ли что-нибудь. –