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

iJK*_*iJK 16 django

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

我的一般观点如下

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


class AuthorUpdateView(UpdateView):
    form_class = AuthorForm
    model = Author
Run Code Online (Sandbox Code Playgroud)

AuthorForm如下

class AuthorForm(ModelForm):
    class Meta:
        model = Author
        fields = ('first_name', 'last_name')
Run Code Online (Sandbox Code Playgroud)

我的模板如下

<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>
Run Code Online (Sandbox Code Playgroud)

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

小智 24

来自docs:

CreateView的

宾语

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

 

更新视图

宾语

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

解:

{% if object %}
    <input type="submit" value="Update Author" />
{% else %}
    <input type="submit" value="Add Author" />
{% endif %}
Run Code Online (Sandbox Code Playgroud)


Dan*_*man 23

在更新视图中,将会有一个form.instance,而form.instance.pk不是None.在创建视图中,可能有也可能没有form.instance,但即使存在form.instance.pk无.