使用Django中的现有ORM数据生成选择字段

时间:2012-10-21 22:28:31

标签: django django-forms

我在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>

我看到了这些。我知道我很接近......只是不能完全理解我的错误。

思想?

1 个答案:

答案 0 :(得分: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。修正了一切。