2014-05-20 2 views
0
나는이 목록을 얻고 난 이미 내보기에 장고 - 관리자 페이지

장고 foriegn 키 IntegrityError : myapp_model2.name_id이되지 않을 수 있습니다 NULL

을 통해 MODEL1 3 샘플 사용자 이름 비밀번호 작성했습니다

class Model1(models.Model): 
    username = models.CharField(max_length=100,null=False,blank=False,unique=True) 
    password = models.CharField(max_length=100,null=False,blank=False) 

class Model2(models.Model): 
    name = models.ForeignKey(Model1) 
    unique_str = models.CharField(max_length=50,null=False,blank=False,unique=True) 
    city = models.CharField(max_length=100,null=False,blank=False) 

userlist = Model1.objects.all() 
#print userlist[0].username, userlist[0].password 

for user in userlist: 
    a,b = Model2.objects.get_or_create(unique_str='f3h6y67') 
    a.name = user 
    a.city = "acity" 
    a.save() 

하지만 역 추적 줄 a,b = Model2.objects.get_or_create(unique_str='f3h6y67')

IntegrityError: myapp_model2.name_id may not be NULL

012,351에서 나에게 오류를 보여주고있다

내가 잘못하고 있니?

답변

0

Foreign_key 필드에 "name"이라는 값을 입력해야 모델을 값없이 인스턴스화 할 수 있습니다. 그렇지 않으면 정의 된 이름없이 get_or_create를 호출 할 때 IntegrityError가 발생합니다. 개체가 생성되면 (아직)으로 정의 된 이름 (사용자)이 없습니다.

class Model2(models.Model): 
    name = models.ForeignKey(Model1, null=True) 

는 get_or_create 호출 할 때 당신은 직접 이름을 설정할 수 있습니다

a,b = Model2.objects.get_or_create(unique_str='f3h6y67', name=user) 

이러한 개체를 만들 계획하고있는 방법에 따라, 당신은 또한에 빈 값을 허용 blank=True을 추가해야 할 수도 있습니다 양식 검증.


당신이 흥미있을 거라고 :)

HTH를이에 대한 추가 정보 및 기타 필드/모델 옵션 the doc하세요!

+0

아직도'a.name = user'과'a.save()'를 설정하고 있습니까? – Ambroise

+0

존재하지 않습니다 : https://docs.djangoproject.com/ko/1.6/ref/models/options/#unique-together :) 사용자의 "더 가벼운"버전을 만들기 위해 노력하고 있다는 것을 이해하고 있지만 모델, 그렇지? 직접 사용하는 방법을 조사해야합니다. – Ambroise

관련 문제