20

如果 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

4 回答 4

32

在更新视图中,会有一个form.instance,并且form.instance.pk不会是 None。在创建视图中,可能有也可能没有form.instance,但即使有form.instance.pk也会没有。

于 2013-09-14T22:07:55.023 回答
30

来自文档:

创建视图

目的

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

 

更新视图

目的

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

解决方案:

{% if object %}
    <input type="submit" value="Update Author" />
{% else %}
    <input type="submit" value="Add Author" />
{% endif %}
于 2014-08-21T19:23:56.587 回答
2

在您的 CreateView 和 UpdateView 类中添加此函数:

# 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

然后使用 {{naming }} 引用模板中的那些

例子

<button type="submit">{{ naming }}</button>
于 2020-01-04T13:04:59.073 回答
0

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

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

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

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

object如果只有一个对象实例,则变为yesupdate view并且那将是它变为no in 的时候create view

于 2021-07-08T17:10:46.747 回答