2012-05-21 3 views
0

내 models.py에는 여러 필드가 있습니다. 기본 키는 기본적으로 Django에 의해 자동으로 설정됩니다.기본 (자동) 기본 키가있는 장고 모델 - 업이트 및 저장된 항목

정기적으로 각 항목을 업데이트하려고 시도하지만 더 이상 저장할 수없는 장고 crontab이 있습니다. (최근까지는이 필드 중 하나를 기반으로 기본 키를 수동으로 설정했습니다.)

누군가이 문제를 해결할 수있는 방법을 제안 할 수 있습니까? 각 항목에 대해 선언 된 각 필드를 업데이트하고 존재하지 않는 경우 만들 수 있어야합니다. 이 방법이 없기 때문에

try: 
    abc = ABC.objects.get(fullid=id) 
except ABC.DoesNotExist: 
    ABC.objects.create(params) 
else: 
    abc.field = value 
    abc.save() 

try: ... except: ...을 사용하지 마십시오 : 둘 다 같은

class ABC(models.Model): 
    init = models.CharField(max_length=6) 
    last = models.CharField(max_length=20) 
    fullid = models.CharField(max_length=30) <--- used to be primary_key=True 

Crontab (pseudocode) 
    for x in list: 
     try: 
      entry = init='abc', last='def', fullid='xyz' 
      entry.save() 

     except: 'unable to update.' <-- I'm now hitting the except all the time. 
+0

몇 가지 코드 샘플을 제공해 주시겠습니까? 정확히 무엇을하려고하는지, 왜 당신이하고있는 것이 작동하지 않는지를 말하기가 조금 어렵습니다. – Karmel

+3

'get_or_create'와 같은 소리가 도움이 될 것입니다 : https://docs.djangoproject.com/en/dev/ref/models/querysets/#get-or-create – arie

+0

@Karmel = - 코드 예제를 추가했습니다. – snakesNbronies

답변

2

사용 무언가를 만들거나이 켜지지로 갱신 않는 저장 인상을

했다 내부에서 무엇이 실패했는지조차 알 수 있습니다. 처리 방법을 알고있는 "기다려온"예외 만 잡으십시오. 또는, 방탄 및 막을 수 없도록하려면 - 적어도 catch 된 예외 정보를 표시하십시오.

+0

+1이 담요를 주소 지정하는 경우 모두 catch를 제외하고 시도하면 고유 키에 오류가 발생합니다. 또한 get_or_create를 만들고 생성 된 bool을 확인하면 필요없는 것을 제외하고는 더 짧게 만들 수 있습니다. – jdi

+0

하하. 예! @jdi와 나는 try and excepts를 가지고 픽업 한 나쁜 습관에 대해 이야기했다. – snakesNbronies

+0

사실, 나는 여기에 2 개의 코드 라인을 더 선호한다. 첫째,'get_or_create'를 사용하여'create' case에 params와 save()를 한 번 더 설정해야합니다. 둘째,'try ... except'는 나에게 더 파이썬 적으로 보인다. 셋째, 일부 필드가'NOT NULL'이면,'create'는 실패합니다. – ilvar

관련 문제