0

我在 Ubuntu 12.04 上使用 Django 1.4 和 Python 2.7。

随着我的进步,我将继续更新这个问题。

更新 2:

我正在尝试使用现有模型中的信息在表单中生成 2 个选择字段。

class AssignProject(forms.Form):

    def __init__(self, devs, *args, **kwargs):
        """
        ..  method:: __init__()

            Class constructor

            :param devs: Tuple with which developer
        """
        super(AssignProject, self).__init__(*args, **kwargs)
        self.dev = forms.ChoiceField(widget = forms.Select(), choices = devs, required = True)
        self.designer = forms.ChoiceField(widget = forms.Select(), choices = devs, required = True)

在这一点上,我似乎还无法访问devdesigner ChoiceField在我的模板中。

这是视图:

@login_required
def view_all_projects(request):
    """
    ..  function:: view_projects()

        Show the projects

        :param request: Django Request object
    """
    data = { 'user' : request.user }
    if (request.user.is_authenticated() and request.user.is_superuser):
        all_projects = Projects.objects.filter(active = True)
        dev_info = User.objects.filter(is_staff = True, is_superuser = False)

        dev_dict = {}
        for dev in dev_info:
            dev_dict[dev.id] = '{0} {1}'.format(dev.first_name, dev.last_name)

        devs = tuple(dev_dict.items())

        form = AssignProject(devs)
        data.update({ 'form' : form })
        data.update({ 'projects'  : all_projects })
        data.update(csrf(request))
        return render_to_response("view_all_projects.html", data)

    return render_to_response("index.html", data)

我已经验证开发人员/设计人员在devs tuple.

...以及来自的模板view_all_projects.html

<form action="/assignProject/" method="post">{% csrf_token %}
    <table>
        <td>
            <input type="hidden" name="project_id" value={{ project.id }}>
            <tr>
                <td align="right"><label class="formlabel">Assign Developer:<br /></label></td><td>{{ form.dev }}</td>
            </tr>
            <tr>
                <td align="right"><label class="formlabel">Assign Designer:<br /></label></td><td>{{ form.designer }}</td>
            </tr>
                <tr>
                    <td align="right"><label class="formlabel">&nbsp;</label></td><td><input type="submit" value="Submit  &#9658;"></td>
                </tr>
        </td>    
    </table>
</form> 

我没有看到任何错误,但我确实看到一个奇怪的对象引用代替ChoiceField了模板中的 。

<django.forms.fields.ChoiceField object at 0x7ffdbc054190>
<django.forms.fields.ChoiceField object at 0x7ffdbc0542d0>

我看到了这些。我知道我很接近......只是无法完全理解我哪里出错了。

想法?

4

1 回答 1

0

问题完全在于形式__init__

我应该分配如下字段:

class AssignProject(forms.Form):

    def __init__(self, devs, *args, **kwargs):
        """
        ..  method:: __init__()

            Class constructor

            :param devs: Tuple with developers
        """
        super(AssignProject, self).__init__(*args, **kwargs)
        self.fields['dev'] = forms.ChoiceField(widget = forms.Select(), choices = devs, required = True)
        self.fields['designer'] = forms.ChoiceField(widget = forms.Select(), choices = devs, required = True)

注意self.fields['dev']不是self.dev。修复了一切。

于 2012-10-21T23:43:42.617 回答