试图在Django中的ModelForm中的TextInput中选择一个用户 - 它将无法正常工作

时间:2016-01-31 20:55:28

标签: django-forms django-1.9

我正在尝试在django 1.9中创建一个webapp来进行任务跟踪和排序。不同的任务分为空格(如不同的项目)。现在,我希望能够在CreateView中选择分配任务的内容。

问题是,我的系统中有大量用户,所以我不想显示下拉列表。相反,我想使用TextInput窗口小部件,以检查可用选项的形式(这样我也可以在客户端使用typeahead)。

这是我为TaskCreate视图提出的最好的结果:

class TaskCreate(LoginRequiredMixin, CreateView):
    """
    a view for creating new tasks
    """
    model = Task
    fields = ['space', 'name', 'description', 'assigned_to', 'due_date']
    template_name = "task_tracker/task_form.html"
    success_url = reverse_lazy('tracker:my_open_task_list')

    def get_context_data(self, **kwargs):
        context = super(TaskCreate, self).get_context_data(**kwargs)
        context['header_caption'] = 'Create'
        context['submit_caption'] = 'Create'
        context['all_usernames'] = [x.username for x in User.objects.all()]

        return context


    def get_form(self, form_class=None):
        form = super(TaskCreate, self).get_form(form_class)
        form.fields['assigned_to'].choices = [(x.username, x.id) for x in User.objects.all()]
        form.fields['assigned_to'].initial = self.request.user.username,
        form.fields['assigned_to'].widget = widgets.TextInput()

        try:
            form.fields['space'].initial = Space.objects.get(name=self.request.GET['space'])
        finally:
            return form

    def form_valid(self, form):
        form.instance.created_by = self.request.user
        form.instance.assigned_to = User.objects.get(username=form.cleaned_data['assigned_to'])
        return super(TaskCreate, self).form_valid(form)

但问题是这不起作用 - 表格仍然认为我的选择是非法的,即使我输入有效的用户名。

我尝试在选择字段中切换x.usernamex.id的位置,但这对我没有帮助。

我现在坚持了一个星期。请有人帮帮我吗?

0 个答案:

没有答案