유효성 검사 문제가 있습니다. 양식 유효성 검사와 모델 유효성 검사를 함께 사용해야하지만 장고 (1.10)는 이와 같이 보이지 않습니다. 장고 모델 유효성 검사
class MyModel(models.Model):
fk = models.ForeignKey('ap.Model')
foo = models.CharField(max_length=12)
def clean(self):
if self.fk.som_field != self.foo:
raise ValidationError("This did not validate")
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ('fk',)
def view(request):
instance = MyModel(foo='bar')
form = MyModelForm(data=request.POST, instance=instance)
if form.is_valid():
# process
# redirect
# display template
그래서 나는 모델 자체에서 일부 모델의 필드 검증이 : 여기
내 설치의 짧은 버전입니다. 내 응용 프로그램의 다른 비 형식 관련 부분에서 다시 사용되기 때문에 여기에이 파일이 필요합니다.
그리고 양식에 사용자 입력 유효성 검사가 있습니다. 이 경우 제공된 fk가 유효하고 존재하는지 확인하십시오.
그러나 양식의 유효성을 검사하고 사용자가 'fk'가 유효하지 않은 경우 양식이 거부됩니다. 그러나 양식은 MyModel.full_clean을 호출하여 모델 유효성 검사를 추가합니다.
fk 필드에 데이터가 없어도 MyModel.clean()을 호출하면 RelatedObjectDoesNotExist 예외가 발생합니다.
어떻게하면됩니까? MyModel.full_clean()은 폼 자체가 유효하여 모델이 적어도 올바른 필드 유형으로 유효성이 검사되도록하기 전까지 폼에서 호출하면 안된다고 생각합니다.
try/except에 MyModel.clean 작업을 포함시켜 RealtedObjectDoesNotExist를 catch 할 수 있지만 나에게 나쁜 코드 냄새가 있습니다. MyModel.fk가 존재한다는 사실은 첫 번째 양식 계층 유효성 검사를 통해 보장되어야합니다.