django에서 ForeignKey에 관한 질문입니다.

조회수 2788회

1)ForeignKey로 설정한 테이블의 데이터들중 한 데이터를 default로 하고 싶으면 어떻게 해야하면 좋을까요?

class Condition(models.Model): #상태명 Ex) 신청/예정/처리/완료
    state_name=models.CharField(max_length=30)
    def  __str__(self):
        return self.state_name

class Apply(models.Model):
     condition=models.ForeignKey(Condition) 

Condition 테이블에는 신청/예정/처리/완료라는 데이터를 만들 예정이고요. 사용자가 from을 못보게 처리할 예정입니다.(관리자만 확인하게끔)

2) 저번 질문입니다. 회원가입( Register) 클래스에는 user와 company 및 office모델이 포함되어 있습니다. 제가 로그인을 하고 글을 작성을 할려고 합니다. 그러면 글을 작성시 제 로그인한 정보에서 company와 office데이터를 글에 포함시키려고합니다.

제가 생각한것은 글(Apply)신청 클래스에서 Register를 외래키를 넣어 글을 쓰면 자동으로 유저의 정보를 포함시키려고 했습니다. 그런데 작성을 해보니 글을 작성시 사용자 글 양식에 모든 회원의 저장된 데이터 중에서 선택을 하게 작성이 되어져서 나와서 자동으로 저장하게 변경하고 싶어 질문을 하게 되었습니다.

class Register(models.Model): #회원가입폼
    user=models.OneToOneField(User,on_delete=models.CASCADE) #id/PW/Email
    company=models.ForeignKey(Company) #회사명
    office=models.CharField(max_length=30) #지점 및 부서

   def __str__(self):
            return self.Title+" "+self.office

class Apply(models.Model):
    register=models.ForeignKey(Register,null=True) #자동으로 회원 정보가 저장
    username_equipment=models.CharField(max_length=30)

이미지

위에화면과 같이 사용자의 팀을 선택하는 화면이 나옵니다. 로그인한 사용자의 정보가 자동으로 들어갔으면 좋겠습니다.

결론 Apply클래스에 register의 ForeignKey를 설정해주면 user를 선택하게 되는데 자동으로 접속한 사용자의 Register 값이 들어갔으면 좋겠습니다.

1 답변

  • (1) 상태만을 저장하기 위해 Condition이라는 모델(테이블)을 만드는건 이상합니다. 꼭 필요한 다른 이유가 없다면 IntegerField를 이용해서 저장하세요. condition필드를 아래와 같이 선언하면서 choice 옵션를 이용하면 어드민에서 옵션을 선택할 수 있습니다. default값은 원하는 값으로 넣으시면 됩니다.

    condition = models.IntegerField(default=0, choices=[(0, "신청"), (1, "예정"), (2, "처리"), (3, "완")])
    

    (2) 지난번에 올려주신 내용으로 보면 Apply를 입력받을때 ModelForm을 사용하면서 fields를 제한했던데 그래도 사용자 정보를 선택하도록 하는 화면이 나오나요?

    • 정보선택화면은 안나오지만 데이터도 저장이 안됩니다. 글은 수정해 놓았습니다. 확인 부탁드립니다. 알 수 없는 사용자 2016.5.25 09:26
    • http://hashcode.co.kr/questions/1949/django-foreignkey에-관한질문입니다 에 올려주신 views.py와 form.py 봐서는 왜 저장이 안되는지 모르겠네요. 여기저기서 출력해 보면서 예상대로 안돌아 가는 부분이 있는지 디버그 해 보셔야 겠습니다. 예를들어 forms.py의 apply.register=Register.objects.get(pk=id) 부분에서 uesr를 잘 가져오는지 체크해볼 수도 있구요. 정토드 2016.5.25 16:53

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)