在admin中预先填充django过滤器水平

时间:2012-09-13 12:47:57

标签: python django model filter django-admin

我有一个关于网球网络的简单Django项目。我想在我的管理界面中使用播放器名称预填充一个水平过滤器。此外,有些玩家可以在晚上7点玩,其他玩家可以在晚上9点玩。我的 model.py 如下:

class thursday(models.Model):
    date = models.DateField()
    time_first = models.ManyToManyField(player, related_name='firsttime', verbose_name='7PM')
    time_second = models.ManyToManyField(player, related_name='secondtime', verbose_name='9PM')

和我的 admin.py

class ThursdayAdmin(admin.ModelAdmin):
    list_display = ('date', 'status')
    search_fields = ['date']
    filter_horizontal = ('time_first', 'time_second',)
    list_filter = ('date',)
    fieldsets = (
        (None, {
            'fields': ('date', 'time_first', 'time_second', 'status')
        }),
    )

显然,我想预先填充“time_first”过滤器水平,只有播放器可以在晚上7点播放,而idem放在第二个播放器。 怎么可能这样做?

提前致谢。

2 个答案:

答案 0 :(得分:2)

感谢您的帮助。我在davydany's website上找到了一个很好的解决方案:

time_first = models.ManyToManyField(player, related_name='firsttime', verbose_name='7PM', limit_choices_to={'id__in': player.objects.filter(preference='7PM')})

我希望这会对别人有所帮助。

答案 1 :(得分:1)

您始终可以创建自定义表单

from django.contrib.admin.widgets import FilteredSelectMultiple
class SomeForm(forms.ModelForm):
    class Meta:
         model = MyModel
    time_first = ModelMultipleChoiceField(
    queryset=Player.objects.filter(......), required=False, widget=FilteredSelectMultiple)