django ForeignKey에 관한질문입니다.
조회수 3047회
첫번째 질문은 아래 코드 ForeignKey의 차이점이 무엇인지 알 수 있을까요? Company에 하나는 " "표시가 되어있는데 어떤것이 다른지 모르겠습니다. 결과는 똑같이 나오는데 스택오버플로우에서는 ""사용하시는분도 계시고 안사용하는 분도 계셔서 궁금했습니다.
class Register(models.Model): #회원가입폼
user=models.OneToOneField(User,on_delete=models.CASCADE) #id/PW/Email
company=models.ForeignKey(Company) #회사명
class Register(models.Model): #회원가입폼
user=models.OneToOneField(User,on_delete=models.CASCADE) #id/PW/Email
company=models.ForeignKey("Company") #회사명
두번째 질문은 ForeignKey 저장입니다. models.py 내용입니다.
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.company+" "+self.office
class Apply(models.Model):
register=models.ForeignKey(Register,null=True)
serialnumber=models.CharField(max_length=30) #시리얼넘버
name=models.CharField(max_length=30) #접수자명
forms.py 에 내용입니다.
class ApplyForm(forms.ModelForm):
class Meta:
model = Apply
exclude = ['register']
fields = ('serialnumber','name')
def save(self, commit=True, id=0):
apply = super(ApplyForm, self).save(commit=False)
if commit:
apply.register=Register.objects.get(pk=id)
apply.save()
return apply
views.py 내용입니다.
def apply(request): #신청화면
if request.method == 'POST':
appfrom = ApplyForm(request.POST)
if appfrom.is_valid():
appsave=appfrom.save(commit=False,id=request.user.id)
appsave.save()
return HttpResponseRedirect('/lookup/')
else:
appfrom = ApplyForm()
return render(request, 'as/apply.html', {'appfrom': appfrom})
결과 이미지
목표는 저 테이블 register에 company와 office를 출력을 원합니다.
지금 상태에서는 저 둘중 하나를 골라야하는데 제가 원하는 것은 회원이 정한 부서를 자동으로 선택 되어지게 만드는 것이였는데 말씀하신것은 그냥 저장 아닌신가요?
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
(1) models.ForeignKey의 init 코드를 보니 모델 또는 모델의 이름을 넣어주면 되네요. 둘 다 상관 없는것 같습니다.
(2)
Apply.save()
전에Apply.register = Register.objects.get(id)
가 와야 합니다. save를 하지 않으면 DB에 반영되지 않으니까요.추가로.
Apply = super(ApplyForm, self).save(commit=False)
는
apply = super(ApplyForm, self).save(commit=False)
로 바꿔주시면 더 보기가 좋을것 같습니다. Apply를 이미 모델명으로 사용하고 있어서 햇갈리네요.
추가내용
Apply.register=Register.objects.get(pk=id)
와 같이 수정해 보세요. 그리고 id가 어디에서도 정의되어 있지 않은것 같은데요? views.py에서 save를 부를때
form.save(id=request.user.id)
와 같이 불러주시고, save는 다음과 같이 id를 받아와야겠습니다.def save(self, commit=True, id=0):
- 여전히 Save가 안된다고 편집요청 주셨는데요. views.py에서 form.is_valid()체크를 하고 있나요? 혹시 is_valid를 통과하는지 확인해 보시고, 통과 안한다면 form.errors에 무슨 내용이 들어 있는지 확인해 보세요. 정토드 2016.5.19 18:25
- 답변을 추가했습니다. 정토드 2016.5.19 18:41
- 질문을 수정했습니다 ㅜ.ㅜ 알 수 없는 사용자 2016.5.23 11:12
- apply를 가져온 다음에 apply.register.company, apply.register.office를 사용하시면 되지 않을까요? 정토드 2016.5.23 14:08
- def save를 말씀하신건가요? 알 수 없는 사용자 2016.5.23 14:24
- views를 말씀하신건가요? 알 수 없는 사용자 2016.5.23 14:25
- save까지는 이제 잘 되시져? 그럼 접수내용화면에서 결과를 보여줄때 company와 office값을 뿌려줄때 apply.register.company, apply.register.office와 같이 사용하면 된다는 의미입니다. 정토드 2016.5.23 14:53
- 죄송합니다 위에 다시한번 수정해 놓았고요. 말씀하신것은 그냥 저장을 말씀하신것같은데 저는 ForeignKey를 모델로 만들때 Register값을 자동으로 선택되게 만들고 싶어서 질문을 올렸는데 말씀하신것으로 했을 경우 선택되어 있지 않습니다. 알 수 없는 사용자 2016.5.23 15:31
댓글 입력