我有一个这样的模型:
class PersonneTravel(models.Model):
personne = models.ForeignKey(Personne, verbose_name=_(u'Person'))
travel = models.TextField(null=True, blank=True, verbose_name=_(u'Travel'))
date_start = models.DateTimeField(default=None, null=True, blank=True,
editable=True, verbose_name=_(u"Start"))
date_end = models.DateTimeField(default=None, null=True, blank=True,
editable=True, verbose_name=_(u"End"))
comments = models.TextField(null=True, blank=True,
verbose_name=_(u'Comments'))
我显示一个人的所有旅行的列表。 我想做的是提供在线 - 编辑任何旅行的可能性,或者将一个添加到一个视图中。
以下是我的表现:
class PersonneTravelForm
包含所有字段class IndexView(LoginRequiredMixin, generic.FormView):
重载get_context_data
我在这里创建所有这些表单:
def get_context_data(self, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs)
context['travels'] = []
for ptf in PersonneTravel.objects.filter(
personne__user=self.request.user,
):
context['travels'].append({
'obj': ptf,
'form': PersonneTravelForm({
'pk': ptf.pk,
'travel': ptf.travel.value,
'date_start': ptf.date_start,
'date_end': ptf.date_end,
'comments': ptf.comments,
})
})
开始,我做了一个循环:
{% for v in travels %}
{% with v.form as form %}
{% include "my_home/travels/travel_form.html" %}
{% endwith %}{# form #}
{% endfor %}
并在文件travel_form.html
中显示表单
slideDown()
表单update
”更新一次旅行时,相应的表单将作为POST
发送。在表单代码中,我创建了def clean_XXXX(self):
形式的所有过滤器,所有字段都已正确“清理”def form_valid(self, form)
中的字段:
pk
则用于更新或删除
pk
用于添加新记录,我添加一个我唯一的问题是,当出现错误时:如果我在检查表单时尝试添加错误,并且出现问题,我会这样做,例如:
def form_valid(self, form):
fc = form.cleaned_data
d_start = fc['date_start']
d_end = fc['date_end']
comments = fc.get('comments', None)
if d_end and d_start:
if d_end > datetime.datetime.now().date() > d_start:
form.add_error('date_start', _(u"Can't start in the past..."))
form.add_error('date_end', _(u"...and end in the future!"))
return super(IndexView, self).form_invalid(form)
一切似乎都很好......除了错误字段始终进入“添加新”空白表单,从不到好的“编辑”表单。你会怎么处理这个?