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
나는 이것을 가지고 놀아야 할 필요가 있다고 생각한다 : https://docs.djangoproject.com/en/dev/ref/models/instances/#validating-objects. 나는 그것이 작동하도록 할 수 있는지 알아보기 위해 그것을 조사 할 것이다. 고마워요 ~~ – thedeepfield
그건 모델 유효성 검사, 유효성 검사 유효성 검사가 아닙니다. 모델의 내부 메타 클래스에 'unique_together'를 지정했기 때문에 예외가 발생하는 이유는 양식과 관련이 없으므로 양식 오류가없는 이유입니다. 양식 오류를 도입하려면 양식에 수동으로 삽입해야합니다. 'ModelForm' –
@pastylegs, odpogn으로 표시되는 인스턴스를 저장하면 예외가 발생합니다. 모델 청소가 효과적입니다. –