如果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>
在我的模板中,我想区分创建和更新视图?
答案 0 :(得分:23)
在更新视图中,会有form.instance
,form.instance.pk
不会为无。在创建视图中,可能有form.instance
,也可能没有form.instance.pk
,但即使{{1}}为无。
答案 1 :(得分:23)
<强> 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}}。