2

이전에 이런 질문을 받았음을 알았지 만, 내가하려는 일을 실제로 처리 한 질문을 찾을 수 없었습니다. 나는 꽤 간단하다고 생각하지만 일반 인구가 가장 좋은 것이라고 생각하는 것을 알고 싶습니다. 우리는 어떻게하지 더 있다는 것을 확인 것 - :Django 모델이 save/signal을 사용하거나 modelform을 사용합니까?

models.py 저장 기능 꽤 많은 액수까지 내 질문에

class TestClass(models.Model): 
    user = models.ForeignKey(User) 
    testfield = models.CharField() 
    testbool = models.BooleanField(default=False) 

def save(self, *args, **kwargs): 
    """ 
    - what we're trying to do here is ensure that the User doesn't have more than 
     X (lets say 5) related test fields. 
    - what if we also wanted to add validation to testfield to ensure it was 
     only [a-zA-Z]? 
    """ 
    if TestClass.objects.filter(user=self.user).count() >= 5: 
     # How do we exit gracefully? 
     return 
    super(TestClass, self).save(*args, **kwargs) 

코멘트가 :

는 다음과 같은 우리가 말할 수 있습니다 5 개의 관련 TestClass를 부여한 사용자에게 - 이미 저장하고 있다면 저장하지 않고 어떻게 종료합니까? - 어떻게 이것을 사용자에게 어떻게보고합니까? - testfield 객체의 유효성을 검사하여 [a-z] 만 있는지 확인하려면 어떻게해야합니까? 나는 다시 가져 와서 여기서도 할 수 있습니까? 이어야합니까?

여기를 던집니다. pre_save 신호를 발사해야합니까? 아니면 그냥 ModelForm 승/유효성 검사를 사용해야합니까?

답변

0

현재이 작업을 수행 할 명확한 장소가 없습니다. 그렇기 때문에 모델 수준의 유효성 검사를 추가하기 위해 지금 Summer of Code 프로젝트가 진행되는 중입니다. 이러한 종류의 작업을 쉽고 편리하게 만들어야합니다.

불행히도 몇 달 동안 준비가되지 않습니다. 그 동안에 귀하의 대답은 데이터 추가 방법에 달려 있습니다. 프로그래밍 적으로 완료 될 예정입니까, 아니면 항상 양식을 통해 이루어 집니까? 후자의 경우 양식에 유효성 검사를 두는 것이 좋습니다 (동일한 모델 폼 또는 하위 클래스를 관리자와 사용자 자신의 뷰 모두에서 사용할 수 있으므로 논리를 복제 할 필요가 없습니다).

+0

관리자가 이것을 사용하면 관리자가 수행하는 표준 유효성 검사 (일명 빈 = False, 적절한 날짜 등)를 덮어 씁니까? 또한 내가 save()를 오버라이드하고 싶다면 그걸 빠져 나가는 가장 좋은 방법은 무엇일까요? 나는 아마 예외를 일으키는 것은 나쁜 것이라고 생각하고있다. 그래서 나는 단지 False를 돌려주고 이유를주지 않는다? – lostincode

+0

실제 필드를 재정의하지 않으면 기본 유효성 검사가 정상적으로 작동합니다. 저장하려면 아무 것도 반환 할 필요가 없으므로 반환하는 것이 좋습니다. –