2012-09-13 95 views
1

我有一個關於網球網絡的簡單Django項目。我想用我的管理界面中的播放器名稱預先填充一個過濾器。另外,有些玩家可以在晚上7點玩,其他玩家可以在晚上9點玩。我model.py情況如下:在管理中預先填充django過濾器水平

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點玩,第二次玩。 怎麼可能做到這一點?

在此先感謝。

回答

0

你總是可以創建自定義窗體

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

我希望這會幫助別人。

+0

你能解釋一下@rphonika的代碼嗎? (簡單英語) – Stryker