2012-03-20 4 views
0

양식 오류를 표시하는 대신 "예외 값 : 열 project_id, employee_id가 고유하지 않습니다"라는 오류 페이지가 표시됩니다. 대신 양식 오류를 표시하려면 어떻게해야합니까?DJANGO : 양식에 유효성 검사 오류가 표시되지 않습니다.

모델 : (프로젝트 및 직원 조합 이미 회원에 존재하는 "과 같이 표시되어야합니다) :

class Project(models.Model): 
    projecttype = models.ForeignKey(Projecttype) 
    department = models.ForeignKey(Department) 
    members = models.ManyToManyField(Employee, through='Membership') 
    def __unicode__(self): 
     return self.projecttype.name 

class Membership(models.Model): 
    project = models.ForeignKey(Project) 
    department = models.ForeignKey(Department) 
    employee = models.ForeignKey(Employee) 
    role = models.ManyToManyField(Role, blank=True, null=True) 
    class Meta: 
     unique_together = (("program", "employee",),) 

보기 :

def employee_edit(request, employee_id): 
    i = get_object_or_404(Employee, pk=employee_id) 
    MembershipForm = make_membership_form(i) 
    MembershipFormSet = modelformset_factory(Membership, form=MembershipForm) 
    f = MembershipFormSet(queryset=Membership.objects.filter(employee=i),) 
    if request.method == "POST": 
     f = MembershipFormSet(request.POST) 
     m = f.save(commit=False) 
     for instances in m: 
      instances.employee = i 
      instances.department = i.department 
     if f.is_valid(): 
      instances.save() 
      f.save_m2m() 
    return render_to_response('testdb/edit.html', {'item': i, 'formset': f, }, context_instance=RequestContext(request)) 

def make_membership_form(i): 
    class MembershipForm(forms.ModelForm): 
     project = forms.ModelChoiceField(queryset=Project.objects.filter(department=i.department)) 
     class Meta: 
      model = Membership 
      exclude = ('department', 'employee') 
      unique_together = (("project", "employee",),) 
    return MembershipForm 

답변

0

당신은 예외가에 save 호출에 던져지지 잡을 수 있습니다 양식과 inject a custom error을 반환하기 전에 양식에 입력하십시오. (매우 테스트되지 않음) :

from django.db import IntegrityException 
... 
formset = MembershipFormSet(request.POST) 
for form in formset: 
    try: 
     form.save(commit=False) 
    catch IntegrityException: 
     errors = form._errors.setdefault("field", ErrorList()) 
     errors.append(u"error") 
+0

나는 이것을 가지고 놀아야 할 필요가 있다고 생각한다 : https://docs.djangoproject.com/en/dev/ref/models/instances/#validating-objects. 나는 그것이 작동하도록 할 수 있는지 알아보기 위해 그것을 조사 할 것이다. 고마워요 ~~ – thedeepfield

+0

그건 모델 유효성 검사, 유효성 검사 유효성 검사가 아닙니다. 모델의 내부 메타 클래스에 'unique_together'를 지정했기 때문에 예외가 발생하는 이유는 양식과 관련이 없으므로 양식 오류가없는 이유입니다. 양식 오류를 도입하려면 양식에 수동으로 삽입해야합니다. 'ModelForm' –

+0

@pastylegs, odpogn으로 표시되는 인스턴스를 저장하면 예외가 발생합니다. 모델 청소가 효과적입니다. –

관련 문제