1

AdminModel に変更を加えた後、クエリの 1 つが突然失敗し始めました。

少し検索した後、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 )

問題を提起するクエリ(2行目):

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 で 1 行コメントすると、次のようになります。

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 )

エラーが消えます。エラーと行った変更との間に相関関係が見られません!

これは、Windows 上の django 1.3 および Python 2.7 で発生します。

4

1 に答える 1

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 )

django 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()
于 2013-05-23T20:56:20.463 に答える