当我提交表单时,我的字段有一个独特的设置,所以我明白了:
具有此全名,国家和出生日期的人已存在
如何让它将我发送到现有的详细信息视图?
class Person(models.Model):
full_name = models.CharField(
max_length=50,
)
country = models.ForeignKey(
Country,
default='FIXED',
)
date_of_birth = models.DateField(
null=True,
)
def __unicode__(self):
return self.full_name
class Meta:
unique_together = (("full_name", "country", "date_of_birth"),)
@models.permalink
def get_absolute_url(self):
return ("checker:detail", (), {
"pk": self.pk
})
Views.py
class PersonTest(CreateView):
model = Person
class PersonTestDetail(DetailView):
model = Person
答案 0 :(得分:0)
如果要重定向到DetailView现有对象,在尝试保存新对象时,应该覆盖ModelForm类中的clean方法,如下所示:
class YourForm(forms.ModelForm):
class Meta:
model = Person
def clean(self):
cleaned_data = self.cleaned_data
full_name = cleaned_data.get("full_name")
country = cleaned_data.get("country")
date_of_birth = cleaned_data.get("date_of_birth")
if Person.objects.filter(full_name=full_name, country=country, date_of_birth=date_of_birth).count() > 0:
del cleaned_data["full_name"]
del cleaned_data["country"]
del cleaned_data["date_of_birth"]
person_pk = Person.objects.get(full_name=full_name, country=country, date_of_birth=date_of_birth).pk
return HttpResponseRedirect(reverse('checker:detail', args=[person_pk]))
return cleaned_data
然后更新您的CreateView:
class PersonTest(CreateView):
model = Person
form_class = YourForm
答案 1 :(得分:0)
这是我想出的自己的灵魂
class PersonTest(CreateView):
model = Person
def form_invalid(self, form):
try:
person = Person.objects.get(full_name=form.cleaned_data['full_name'], date_of_birth=form.cleaned_data['date_of_birth'], country=form.cleaned_data['country'])
return HttpResponseRedirect(reverse('checker:detail', kwargs={'pk': person.id}))
except:
return super(ModelFormMixin, self).form_invalid(form)