[PYTHON] 장고 : unique_together 오류 메시지를 재정의하는 방법?
PYTHON장고 : unique_together 오류 메시지를 재정의하는 방법?
모델의 메타 클래스에서 unique_together를 정의합니다. 이 모델을 기반으로 한 ModelForm이 있습니다. 이 ModelForm에서 is_valid를 호출하면 unique_together 유효성 검사가 실패 할 경우 오류가 자동으로 발생합니다. 그게 다 좋다.
이제 내 문제는 기본 unique_together 오류 메시지가 만족스럽지 않다는 것입니다. 나는 그것을 무시하고 싶다. 어떻게해야합니까? 필드 관련 오류의 경우 필드 매개 변수에 error_messages를 설정하여이를 쉽게 수행 할 수 있습니다. 그러나 unique_together는 필드가 아닌 오류입니다. 비 필드 오류 메시지를 무시하려면 어떻게해야합니까?
해결법
-
==============================
1.당신은 장고 1.7에서 이것을 할 수있다.
당신은 장고 1.7에서 이것을 할 수있다.
from django.forms import ModelForm from django.core.exceptions import NON_FIELD_ERRORS class ArticleForm(ModelForm): class Meta: error_messages = { NON_FIELD_ERRORS: { 'unique_together': "%(model_name)s's %(field_labels)s are not unique.", } }
-
==============================
2.업데이트 2016/10/20 : Django> = 1.7에 대한 jifeng-yin의 더 멋진 답변보기
업데이트 2016/10/20 : Django> = 1.7에 대한 jifeng-yin의 더 멋진 답변보기
이러한 오류 메시지를 무시하는 가장 좋은 방법은 모델의 unique_error_message 메서드를 재정의하는 것일 수 있습니다. Django는이 메서드를 호출하여 유효성 검사 중에 고유성 문제가 발생할 때마다 오류 메시지를 가져옵니다.
당신은 단지 원하는 특정 케이스를 처리 할 수 있고, 다른 모든 케이스는 Django에서 평소처럼 처리 할 수 있습니다 :
def unique_error_message(self, model_class, unique_check): if model_class == type(self) and unique_check == ('field1', 'field2'): return 'My custom error message' else: return super(Project, self).unique_error_message(model_class, unique_check)
-
==============================
3.빠른 점검 후, unique_together 유효성 검증 오류가 django.db.models.Model.unique_error_message의 하드 코딩 된 것 같습니다.
빠른 점검 후, unique_together 유효성 검증 오류가 django.db.models.Model.unique_error_message의 하드 코딩 된 것 같습니다.
def unique_error_message(self, model_class, unique_check): opts = model_class._meta model_name = capfirst(opts.verbose_name) # A unique field if len(unique_check) == 1: field_name = unique_check[0] field_label = capfirst(opts.get_field(field_name).verbose_name) # Insert the error into the error dict, very sneaky return _(u"%(model_name)s with this %(field_label)s already exists.") % { 'model_name': unicode(model_name), 'field_label': unicode(field_label) } # unique_together else: field_labels = map(lambda f: capfirst(opts.get_field(f).verbose_name), unique_check) field_labels = get_text_list(field_labels, _('and')) return _(u"%(model_name)s with this %(field_label)s already exists.") % { 'model_name': unicode(model_name), 'field_label': unicode(field_labels) }
따라서 모델에서이 메서드를 재정 의하여 직접 메시지를 삽입해야합니다.
그러나, 나는 시도하지 않고, 그것은 다소 잔인한 해결책으로 보인다! 그러나 당신이 더 좋은 것을 가지고 있지 않다면, 당신은 시도해 볼 수도 있습니다 ...
-
==============================
4.Notice :이 대답 이후 장고에서 많은 변화가있었습니다. 그래서 다른 답변을 더 잘 확인하십시오 ...
Notice :이 대답 이후 장고에서 많은 변화가있었습니다. 그래서 다른 답변을 더 잘 확인하십시오 ...
sebpiq가 참인 경우 (소스 코드를 확인하지 않기 때문에) 당신이 할 수있는 가능한 해결책이지만 어려운 방법입니다 ...
여기에 설명 된대로 양식에 유효성 검사 규칙을 정의 할 수 있습니다
하나 이상의 필드에서 유효성 검증의 예제를 볼 수 있으므로이 메소드를 사용하여 표준 장고 고유 검사가 실행되기 전에 고유 한 검사를 정의 할 수 있습니다.
또는 최악의 경우, 개체를 저장하기 전에보기에서 유효성 검사를 수행 할 수 있습니다.
-
==============================
5.모델에서 django / db / models / base.py : Model._perform_unique_checks ()를 재정의 (override) 할 수 있습니다.
모델에서 django / db / models / base.py : Model._perform_unique_checks ()를 재정의 (override) 할 수 있습니다.
이 방법으로 "원래"오류를 얻을 수 있습니다.
errors = super(MyModel, self)._perform_unique_checks(unique_checks)
- 그 다음 그것을 수정하고 위로 돌려라.
from https://stackoverflow.com/questions/3993560/django-how-to-override-unique-together-error-message by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Javascript를 사용하여 웹 사이트 스크랩? (0) | 2018.10.24 |
---|---|
[PYTHON] 범위와 파이썬 최적화에서 세계 최소를 찾는 방법? (0) | 2018.10.24 |
[PYTHON] 파이썬 람다 문제 (0) | 2018.10.24 |
[PYTHON] 파이썬 함수에 동적으로 추가 (0) | 2018.10.24 |
[PYTHON] 가져 오기 오류 : 'No module named'* does * exist (0) | 2018.10.24 |