이전에 이런 질문을 받았음을 알았지 만, 내가하려는 일을 실제로 처리 한 질문을 찾을 수 없었습니다. 나는 꽤 간단하다고 생각하지만 일반 인구가 가장 좋은 것이라고 생각하는 것을 알고 싶습니다. 우리는 어떻게하지 더 있다는 것을 확인 것 - :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 승/유효성 검사를 사용해야합니까?
관리자가 이것을 사용하면 관리자가 수행하는 표준 유효성 검사 (일명 빈 = False, 적절한 날짜 등)를 덮어 씁니까? 또한 내가 save()를 오버라이드하고 싶다면 그걸 빠져 나가는 가장 좋은 방법은 무엇일까요? 나는 아마 예외를 일으키는 것은 나쁜 것이라고 생각하고있다. 그래서 나는 단지 False를 돌려주고 이유를주지 않는다? – lostincode
실제 필드를 재정의하지 않으면 기본 유효성 검사가 정상적으로 작동합니다. 저장하려면 아무 것도 반환 할 필요가 없으므로 반환하는 것이 좋습니다. –