5

모범 사례를 찾고 있었지만 찾지 못했습니다. 나는 다른 누군가가 사용해야하는 해결책을 찾지 못했습니다. 내가 필요장고의 사용자 모델에서 다른 필드를 기반으로 사용자 이름을 자동으로 만듭니다.

그의 다른 데이터 (첫번째 & 성을 이름)를 기반으로 사용자의 사용자 이름을 생성, 선택적 끝에 정수를 추가, 나는 고유 한 사용자 이름을 얻을 때까지.

모델에서 그렇게하는 것이 좋습니다. 거기에 몇 가지 표준 방법이 있습니까? 또는 양식에서만 적합합니까? 다양한 User 모델 메서드의 오버로드 및 신호를 조사하고 추가 할 수있는 적절한 위치를 찾지 못했습니다.

답변

4

가능한 해결책은 pre_save 신호 일 수 있습니다.

def my_callback(sender, **kwargs): 
    obj = kwargs['instance'] 
    if not obj.id: 
     username = get_unique_username(obj) # method that combines first name and last name then query on User model, if record found, will append integer 1 and then query again, until found unique username 
     obj.username = username 
pre_save.connect(my_callback, sender=User) 
+0

나는 이것을 사용하려고 생각하고 있었지만 실제로 어떤 형태로 그렇게 할 것인가에 관심이 있습니다. 양식은'save()'를 호출하기 전에 입력 내용의 유효성을 검사하므로이 필드는 유효하지 않은 것으로 처리됩니다. Btw. 'obj.save()'는 또한'pre_save' 신호를 호출 할 것이기 때문에 아마 이것을 제거해야합니다. – Tadeck

+0

당신의 솔루션은 작동하지만, 항상 유효하지는 않습니다 (저장 전에 유효성 검사가 처리되면 불행합니다) 기존의 모델을 업데이트하는 경우'obj.save()'및'get_unique_username'의 제거가 필요합니다. . 일반적으로 나는 그것을 할 수있는 더 좋은 방법이 없다고 생각합니다. 그래서 당신의 대답은 받아 들일 수 있습니다. 감사. – Tadeck

+0

@Tadeck은 답을 보았습니다. 이제 당신의 지적 이슈를 다룹니다. – Ahsan