在模板中区分创建和更新表单

时间:2013-09-14 21:44:24

标签: django

如果CreateView和UpdateView使用相同的模板“model_form.html”,那么在模板中,如果我要创建或更新表单,我将如何区分?

我的通用视图如下

class AuthorCreateView(CreateView):
    form_class = AuthorForm
    model = Author


class AuthorUpdateView(UpdateView):
    form_class = AuthorForm
    model = Author

AuthorForm如下

class AuthorForm(ModelForm):
    class Meta:
        model = Author
        fields = ('first_name', 'last_name')

我的模板如下

<form action="" method="post">
            {% csrf_token %}
            <table border="0" cellpadding="4" cellspacing="0">
                <tr>
                    <td>First Name</td>
                    <td>{{ form.first_name.errors }}{{ form.first_name }}</td>
                </tr>
                <tr>
                    <td>Last Name</td>
                    <td>{{ form.last_name.errors }} {{ form.last_name }}</td>
                </tr>
            </table>
            {% if form.isNew %}
                <input type="submit" value="Update Author" />
            {% else %}
                <input type="submit" value="Add Author" />
            {% endif %}
        </form>

在我的模板中,我想区分创建和更新视图?

4 个答案:

答案 0 :(得分:23)

在更新视图中,会有form.instanceform.instance.pk不会为无。在创建视图中,可能有form.instance,也可能没有form.instance.pk,但即使{{1}}为无。

答案 1 :(得分:23)

来自docs:

  

<强> CreateView

     

物体

     

使用CreateView时,您可以访问self.object,即正在创建的对象。如果尚未创建对象,则值将为无

  

<强> UpdateView

     

物体

     

使用UpdateView时,您可以访问self.object,即正在更新的对象。

解决方案:

{% if object %}
    <input type="submit" value="Update Author" />
{% else %}
    <input type="submit" value="Add Author" />
{% endif %}

答案 2 :(得分:0)

在您的CreateView和UpdateView类中添加此功能:

public boolean isSameWeek(Calendar calendar1, Calendar calendar2) {
    Calendar calendar2Copy = (Calendar) calendar2.clone();
    calendar2Copy.setTimeZone(calendar1.getTimeZone());
    calendar1.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
    calendar2Copy.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

    return calendar1.get(Calendar.YEAR) == calendar2Copy.get(Calendar.YEAR)
            && calendar1.get(Calendar.DAY_OF_YEAR) == calendar2Copy.get(Calendar.DAY_OF_YEAR);
}

然后使用{{命名}}

引用模板中的内容

示例

# For Create
def get_context_data(self, **kwargs):
        kwargs['naming'] = 'Create'
        context = super(CLASSNAME, self).get_context_data(**kwargs)
        return context

# For Update
def get_context_data(self, **kwargs):
        kwargs['naming'] = 'Update'
        context = super(CLASSNAME, self).get_context_data(**kwargs)
        return context

答案 3 :(得分:0)

最简单的方法是使用模板 yesno 过滤器作为

{{ object|yesno:'Update Author,Create Author' }}

在你的情况下,因为作者在两者中都是同一个词

{{ object|yesno:'Update,Create' }} Author

object 变成 yes 如果只有一个对象实例,那将是 update view 而它变成 no 在 { {1}}。