如何让Django ForeignKey表现得像DateField

时间:2017-05-19 15:48:44

标签: django date foreign-keys hierarchy

我有一个Day类,其ID是DateField。我有一个Event类,通过ForeignKey链接到该DateField。我想使用像date_hierarchy这样的ModelAdmin功能,但我得到了

<class 'myapp.admin.EventAdmin'>: (admin.E128) 
The value of 'date_hierarchy' must be a DateField or DateTimeField.

这是我的models.py文件:

class Day(models.Model):
    date = models.DateField(primary_key=True)

    def __str__(self):
        return str(self.date)

class Event(models.Model):
    date = models.ForeignKey(Day, to_field='date', related_name='events')
    bullet = models.TextField()

    def __str__(self):
        return self.bullet[:20]

admin.py有:

class EventAdmin(admin.ModelAdmin):
    list_display = ('date', 'bullet')
    search_fields = ('bullet',)
    list_filter = ('date',)
    date_hierarchy = 'date'
    ordering = ('-date',)

date_hierarchy不起作用,list_filter不会按日期分解。

有没有办法将Event ForeignKey字段转换为一个被视为DateField的表单?

我看了herehere失败了,虽然v1.11中的一个功能可以让我直接引用相关模型上的字段。

1 个答案:

答案 0 :(得分:0)

我希望这是一个人为的例子,因为单列表在这里没有多大意义。你可以很容易地拥有这个

class Event(models.Model):
    date = models.DateField(primary_key=True)
    bullet = models.TextField()

假设您遗漏了一些相关字段并且Day模型很重要,事件应该只是:

class Event(models.Model):
    date = models.ForeignKey(Day, related_name='events')
    bullet = models.TextField()

to_field在这里并没有用。然后

class EventAdmin(admin.ModelAdmin):
    list_display = ('date__date', 'bullet')
    search_fields = ('bullet',)
    list_filter = ('date__date',)
    date_hierarchy = 'date__date'
    ordering = ('-date__date',)