2

부서/위치 필드가 사용자 모델과 관련되어있는 Django 프로그램을 작성하고 있습니다. 등록 페이지에서 사람은 성/이름, 이메일, 사용자 이름, 암호 (기본 사용자 모델 필드는 물론 부서 및 직책)를 입력해야합니다.기본 사용자 모델과 외래 키 관계가있는 Django 모델을 사용합니다.

그리고 내가 만든 두 모델은 다음과 같습니다. views.py에서

class Department(models.Model): 
    department_id = models.AutoField(primary_key=True) 
    department_name = models.CharField(max_length=100, unique=True) 
    is_active = models.BooleanField(default=True) 

class Position(models.Model): 
    position_id = models.AutoField(primary_key=True) 
    position_name = models.CharField(max_length=100) 
    department = models.ForeignKey(Department) 
    user = models.OneToOneField(User, blank=True, related_name="position") 

는 관련보기는 다음과 같이 진행됩니다

def sign_up_in(request): 
    global user 
    post = request.POST 
    if post['email'] is u'' or post['password'] is u'': 
     msg = 'Please check sign-up input forms' 
     return render_to_response('none.html', {'msg': msg}) 
    else: 
     if not user_exists(post['email']): 
      user = create_user(username=post['email'], email=post['email'], password=post['password']) 
     user.first_name=post['first'] 
     user.last_name=post['last'] 
     **user.position.position_name=post['position']** 
     user.department=post['department'] 
     user.is_staff = True 
     user.save() 

     msg = 'Sign Up OK ' + user.first_name + ' ' + user.last_name 
    else: 
     msg = 'Existing User' 
    return render_to_response('login.html', {'msg': msg}) 

나는, 위 views.py에서 굵게 라인을 추가 할 때 나는 오류 "이 공급되지 않은 예외"를 받기 시작했다. 모델과 뷰에서 무엇을 변경해야합니까? 또한이 코드 줄에서 user = create_user (username = post [ 'email'], email = post [ 'email'], password = post [ 'password']) 어떻게 외래 키 관계를 표현해야합니까?

답변

1

간단한 대답은 user.position이 아직 존재하지 않는다는 것입니다.

작동 시키려면 다음과 같이하십시오. 당신은 단지 (위 한 사용자로) 더 많은 데이터를 추가 할 경우 다시 저장해야하므로 User.objects.create_user()Foo.objects.create()가 자동으로 개체를 저장하는 것이

def sign_up_in(request): 
    ... 
    post = request.POST 
    ... # Your if block 

     # 1. Create your user. 
     user = User.objects.create_user(post['email'], post['email'], post['password']) 
     user.first_name = post['first'] 
     user.last_name = post['last'] 
     user.is_staff = True 
     user.save() 
     # 2. Create/get your department. 
     dept, created = Department.objects.get_or_create(department_name=post['department']) 
     # 3. Create your position 
     position = Position.objects.create(department=dept, user=user, position=post['position']) 
    ... 

참고.

보조 노트로이 문제가 해결되지만이 특정보기를 스크랩하고이를 처리하기 위해 Form 클래스를 사용하는 것이 좋습니다. Form 클래스를 사용하면 훨씬 더 쉬운 방법으로 많은 것을 처리 할 수 ​​있으며 필요한 많은 검증 메소드를 제공합니다. 여기에서 관련 문서를 확인할 수 있습니다. https://docs.djangoproject.com/en/1.6/topics/forms/