2011-08-16 7 views
5

난 남쪽을 사용하여 장고 모델에 ForeignKey 필드를 추가하려고합니다. 다음과 같은 오류가 나타납니다 :Django ForeignKey 필드의 기본값을 어떻게 지정합니까?

ValueError: You cannot add a null=False column without a default value. 

실제로 필드의 기본값을 지정했는데 정확하게했는지 확신 할 수 없습니다.

language = models.ForeignKey(Language, default=Language.objects.all()[0]) 

답변

7

AFAIK Django는 하나의 요소로 제한되어 있어도 매개 변수로 전달 된 QuerySet을 실행하지 않습니다. 당신이 정말 @radious 대답 확장입니다 in this post

class Foo(models.Model): 
    a = models.CharField(max_length=10) 

def get_foo(): 
    return Foo.objects.get_or_create(id=1) 

class Bar(models.Model): 
    b = models.CharField(max_length=10) 
    a = models.ForeignKey(Foo, default=get_foo) 
+0

나도 같은 게시 때문에이

return Foo.objects.get_or_create(id=1) 

보다 더 나은 솔루션이라고 생각했습니다. 또한 Foo에 데이터가없는 경우 get_foo에서 기본 요소를 만들 수 있습니다. – balazs

+1

예, get_or_create를 사용하는 것이 좋습니다. – radious

2

제안 같은 것을 시도해야합니다. 당신은 당신이 get_or_create() 메소드가 튜플을 반환하기 때문에 인덱스 0을 사용해야하는 줄의 코드

class Foo(models.Model): 
    a = models.CharField(max_length=10) 

class Bar(models.Model): 
    b = models.CharField(max_length=10) 
    a = models.ForeignKey(Foo, default=lambda: Foo.objects.get_or_create(id=1)[0]) 

메모를 잘라 찾고 있다면 당신은 또한, 기본에서 람다를 사용할 수 있습니다, 그래서 당신은 필요 튜플 대신에 객체를 얻는다.

+0

장고는 람다 식을 직렬화 할 수 없습니다. –

관련 문제