我有一个关于网球网络的简单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放在第二个播放器。 怎么可能这样做?
提前致谢。
答案 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)