0

我很熟悉使用模板来收集数据,但是在显示时是否有一种聪明的方式让 Django 显示字段并用正确的值填充它们。我当然可以手动完成,但模型知道字段类型。我没有看到任何关于此的文档。例如,我从模板中收集数据:

   <strong>Company Name</strong>
   <font color="red">{{ form.companyname.errors }}</font>
   {{ form.companyname }}

其中 form 是我的公司模型,包含所有字段。我将如何确保我可以使用这种类型的方法,以便 Django 呈现文本字段并填充当前值。例如,有没有一种方法可以通过以下方式发送值:

    myid = int(self.request.get('id'))
    myrecord = Company.get_by_id(myid)
    category_list = CompanyCategory.all()
    path = os.path.join(os.path.dirname(__file__), 'editcompany.html')
    self.response.out.write(template.render(path, {'form': myrecord, 'category_list': category_list}))

我可以对记录执行相同的操作吗?模板是否会填充发送的值?谢谢

4

2 回答 2

3

听起来您可能对Formvs的区别和正确用法感到困惑ModelForm

无论您使用哪种类型的表单,表单的模板方面都保持不变:注意:表单中的所有值(只要它绑定到 POST 或具有实例)都将在渲染时预填充。

<form class="well" action="{% url member-profile %}" method="POST" enctype="multipart/form-data">{% csrf_token %}
    <fieldset>
        {{ form.non_field_errors }}

        {{ form.display_name.label_tag }}
        <span class="help-block">{{ form.display_name.help_text }}</span>
        {{ form.display_name }}
        <span class="error">{{ form.display_name.errors }}</span>

        {{ form.biography.label_tag }}
        <span class="help-block">{{ form.biography.help_text }}</span>
        {{ form.biography }}
        <span class="error">{{ form.biography.errors }}</span>

        <input type="submit" class="button primary" value="Save" />
    </fieldset>
</form>

如果您想从记录中填充表单(或提交表单作为记录),最好使用ModelForm

EX 不显示 User FK 下拉列表的配置文件表单:

class ProfileForm(forms.ModelForm):
    """Profile form"""      
    class Meta:
        model = Profile
        exclude = ('user',)

风景:

def profile(request):
    """Manage Account"""
    if request.user.is_anonymous() :
        # user isn't logged in
        messages.info(request, _(u'You are not logged in!'))
        return redirect('member-login')

    # get the currently logged in user's profile
    profile = request.user.profile

    # check to see if this request is a post
    if request.method == "POST":
        # Bind the post to the form w/ profile as initial
        form = ProfileForm(request.POST, instance=profile)
        if form.is_valid() :
            # if the form is valid
            form.save()
            messages.success(request, _(u'Success! You have updated your profile.'))
        else :
            # if the form is invalid
            messages.error(request, _(u'Error! Correct all errors in the form below and resubmit.'))
    else:
        # set the initial form values to the current user's profile's values
        form = ProfileForm(instance=profile)

    return render(
        request, 
        'membership/manage/profile.html', 
        {
            'form': form, 
        }
    )

请注意,外部else使用实例初始化表单:form = ProfileForm(instance=profile)并且表单提交使用 post 初始化表单,但仍然绑定到实例form = ProfileForm(request.POST, instance=profile)

于 2012-07-06T18:00:41.707 回答
0

如果您正在查看表单,那么从 Django 的表单框架开始似乎是个好主意,特别是模型的表单

于 2012-07-06T17:51:14.170 回答