2

我有一个关于网球网络的简单 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 点播放的玩家,第二个同上。怎么可能做到这一点?

提前致谢。

4

2 回答 2

2

谢谢你的帮助。我在davydany 的网站上找到了一个很好的解决方案:

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

我希望这对其他人有帮助。

于 2012-09-14T08:52:12.877 回答
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)
于 2012-09-13T14:22:08.393 回答