如何让 Django ForeignKey 表现得像 DateField

How to get Django ForeignKey to behave like a DateField

我有一天 class,它的 ID 是一个 DateField。我有一个事件 class,它通过 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 的表单?

我查看 here and here 失败,尽管 v1.11 中的一项功能可能让我直接参考相关模型上的字段。

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

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',)