이것은 stackoverflow에 대한 첫 번째 게시물이므로 질문하는 방법에 대한 비판을 환영합니다. 내 코드에서Django - get_or_create 트리거 RunTimeError : 최대 재귀 깊이 초과
, 나는이 오류가 :
여기RuntimeError: maximum recursion depth exceeded
코드입니다 (내용이 무관하다, 난 그냥 간단한 방법 할 수있는 오류를 재현). 기본적으로 __init__를 재정의하려고합니다. 개체가 데이터베이스에 있으면 무언가를하고 싶지 않으면 무언가를하고 싶습니다.
Question('how are you?')
나는 문제가 get_or_create 방법에서 유래 이해 : 생성자를 호출 할 때
class Question(models.Model):
text = models.CharField(max_length=140)
asked = models.BooleanField(default=False)
def __init__(self, text, *args):
#called the __init__ of the superclass.
super(Question, self).__init__()
self, c = Question.objects.get_or_create(text=text)
if c:
print 'This question will be asked!'
self.asked = True
self.save()
else:
print 'This question was already asked'
assert self.asked == True
오류가 발생합니다.
---> 12 self, c = Question.objects.get_or_create(text=text)
...
---> 146 return self.get_query_set().get_or_create(**kwargs)
...
---> 464 obj = self.model(**params)
get_or_create 어떤 시점에서 객체의 생성자를 호출, 오류 메시지에서 찾고있다. 어떤은 ... get_or_create 다시 등 호출
편집 :
Question('How are you?')
를하고 데이터베이스에, 또는 새로 만든 경우 개체가 반환 갖는 기본적으로 내가 쓸 수있게되고 달성하고 싶은 무엇 그렇지 않은 경우 하나를 저장합니다. 대신 같은의 :
> try:
> q = Question.objects.get(text='How are you?')
> except Question.DoesNotExist:
> q = Question(text='How are you?')
> q.save()
그래서 나는 이것을 달성하는 유일한 방법은 __init__를 재정 의하여이라고 생각한다. 그것은 가능하지 않거나 개념적으로 틀린가 (또는 둘 다)? 감사!
난 당신이 __init__ 방법 : – lalo
당신이'자기, C = Question.objects.get_or_create (텍스트 = 텍스트)'와 함께 일을하려고 무엇을 덮어 쓰지해야한다고 생각? – lalo
방금 내 목표를 더 이해하기 쉽게 편집했습니다. – forbo