2017-02-10 4 views
1

私は事業の最もシンプルを行うと、エラーを取得しています...私は、モデルインスタンスを引っ張って、いくつかのフィールドを更新した後、私は変更され、これらのフィールドを保存しています。これらのフィールドの1つにnull値が許可されていないというエラーが返されます。そのブール値フィールドは、models.pyにデフォルト値を持ち、そしてデータベースにあり、それは値を保存しているフィールドの1つです。Djangoスクリプトがモデルインスタンスを保存できません。値がnullのフィールドにエラーが発生します...?

models.py

class Person(TimeStampedModel): 
    # ... 
    precertified = models.BooleanField(default=False) 

logic.py person.save()を使用して

try: 
    print('Getting Person %s...' % record['nurturing_id']) 
    person = Person.objects.get(pk=record['nurturing_id']) 
except Person.DoesNotExist: 
    person = None 
    print('Person %s no longer exists.' % record['nurturing_id']) 
if person: 
    person.uncorrected_address = person.address 
    person.uncorrected_address_line_two = person.address_line_two 
    person.uncorrected_city = person.city 
    person.uncorrected_state = person.state 
    person.uncorrected_zipcode = person.zipcode 
    person.address = record['Address'] 
    person.address_line_two = record['Address Line Two'] 
    person.city = record['City'] 
    person.state = record['State'] 
    person.zipcode = record['Zipcode'] 
    person.precertified = True 
    person.precertified_check = now 
    person.save(update_fields=['precertified', 'address', 'address_line_two', 'city', 'state', 'zipcode', 'uncorrected_address', 'uncorrected_address_line_two', 'uncorrected_city', 'uncorrected_state', 'uncorrected_zipcode', ]) 

も失敗します。

トレースバック:

Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/sites/easy/apps/JSM/logic.py", line 1349, in precertify_contacts 
    person.save(update_fields=['precertified', 'address', 'address_line_two', 'city', 'state', 'zipcode', 'uncorrected_address', 'uncorrected_address_line_two', 'uncorrected_city', 'uncorrected_state', 'uncorrected_zipcode', ]) 
    File "/Environments/easy/local/lib/python2.7/site-packages/model_utils/tracker.py", line 134, in save 
    ret = original_save(**kwargs) 
    File "/Environments/easy/src/easyapps/nurturing/models.py", line 248, in save 
    super(Person, self).save(*args, **kwargs) 
    File "/Environments/easy/local/lib/python2.7/site-packages/django/db/models/base.py", line 708, in save 
    force_update=force_update, update_fields=update_fields) 
    File "/Environments/easy/local/lib/python2.7/site-packages/django/db/models/base.py", line 736, in save_base 
    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields) 
    File "/Environments/easy/local/lib/python2.7/site-packages/django/db/models/base.py", line 801, in _save_table 
    forced_update) 
    File "/Environments/easy/local/lib/python2.7/site-packages/django/db/models/base.py", line 851, in _do_update 
    return filtered._update(values) > 0 
    File "/Environments/easy/local/lib/python2.7/site-packages/django/db/models/query.py", line 645, in _update 
    return query.get_compiler(self.db).execute_sql(CURSOR) 
    File "/Environments/easy/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 1149, in execute_sql 
    cursor = super(SQLUpdateCompiler, self).execute_sql(result_type) 
    File "/Environments/easy/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 848, in execute_sql 
    cursor.execute(sql, params) 
    File "/Environments/easy/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 79, in execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "/Environments/easy/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
    File "/Environments/easy/local/lib/python2.7/site-packages/django/db/utils.py", line 95, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "/Environments/easy/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 

IntegrityError: null value in column "precertified" violates not-null constraint 
DETAIL: Failing row contains (165771, 2016-11-16 01:48:15.613901+00, 2017-02-10 14:09:34.11354+00, General Manager, Prospect, null, , [email protected], 1671 SOME RD, None, LINTHICUM, MD, 21090-9999, null, null, null, null, null, null, 999999, null, null, null, null, , Company Name, null, null, null, null, null, null, , , null, null, null, f, null, null, null, 005o0000001fAnfAAE, , Market Specific Mass Email, null, null, 00Qo0000006RxoUEAS, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, f, null, null, 2017-02-10 14:09:34.061993+00, 1671 Some Rd, null, Linthicum, MD, 21090). 

私は愚かな何かが足りないことするんです。誰かが私にスティックしてくれますか? @Satevgが提案されているよう

+0

は本当に奇妙に見える、あなたは)(person.save前(person.precertified)印刷してみたのですか?また、models.pyにこのクラスのsave()メソッドがあるかどうか確認してください。シグナルを見てください - 例えば、保存前 – Satevg

+0

@Satevg:はい!私はそれを逃したとは信じられません。以前のバージョンのモデルに基づいたカスタム保存メソッドがありました。アドレスが変更された場合、事前確認をなしに設定しました。 *額を叩く*ありがとう! – Psyferre

+0

答えとしてのコメントの追加:) – Satevg

答えて

0

は本当に奇妙に見える、あなたがperson.save()print(person.precertified)にしようとしたのですか?このクラスのsave()方法がmodels.pyであるかどう

も確認してください。信号を見てみましょう - 例えばpre-save

0

ただ、私はモデルの以前のバージョンに基づいて、保存方法、カスタムを持っていました。アドレスフィールドのいずれかが変更された場合は、事前確認をなしに設定しました(以前のバージョンではブール値ではありません)。

(@Satevg - 。あなたがそうあなたには、いくつかのポイントを取得し、私はそれを受け入れるだろう答えとしてあなたのコメントを再投稿したい場合)

関連する問題