2017-01-07 6 views
0

何か検索した後、関連する質問の中で私の特定の問題を解決できません。私は明らかに彼らが理解していないので、私は冗長のために謝罪します。save()保存されていない関連オブジェクトによるデータの損失を防ぐことが禁止されています。Django 1.10

これは私のトレースバックです:

Traceback (most recent call last): File "csvimport.py", line 79, in f.save() File "/home/blake/django_/venv/lib/python3.5/site->packages/django/db/models/base.py", line 752, in save "unsaved related object '%s'." % field.name ValueError: save() prohibited to prevent data loss due to unsaved related >object 'aircraft'.

これが問題のスクリプトです:http://pastebin.com/Jks0HgEr

これらは私のモデルです:http://pastebin.com/uGUqckqS

私はなぜ関数assignAircraft()ISNを言うことができませんAircraft.aircraft_typeオブジェクトが行56で呼び出されたときにそれを保存していない

奇妙なことに、最初のイン行[1]のタンスが航空機モデルに保存されています。

さらに、洗練された/ pep8の提案は大歓迎です。

答えて

0

私はassignAircraft

def assignAircraft(row_id): 
    if aircraft_queryset.filter(aircraft_type = row_id).exists(): 
     pass 
    else: 
     a = Aircraft(
      aircraft_type = row_id, 
     ) 
     a.save() 
    return Aircraft(aircraft_type = row_id) 

あなたの関数の戻りオブジェクトを指し示すしたいと思い、この機能は、保存されたインスタンスを返しますが、一時的なインスタンスAircraft(aircraft_type = row_id)しません。

保存したインスタンスaを返すか、既存のアイテムがない場合は何かを返す必要があります。

def assignAircraft(row_id): 
    if aircraft_queryset.filter(aircraft_type=row_id).exists(): 
     # DO SOMETHING AND RETURN SOMETHING 
    else: 
     a = Aircraft(aircraft_type=row_id) 
     a.save() 
     return a 

IMO、get_or_create manager functionが役に立ちます。

+0

ああ、そのような痛い間違い!私はあまりにも長い時間waayを見ていた!私はget_or_createを調べます。ありがとう! – user2498975

+0

私はこれを行うにはチャンスがあったし、それはとても簡単なようだが、私はこのエラーを得た: 航空機= assignAircraft(行では、 ファイル「csvimport.py」、56行: トレースバック(最後の最新のコール) [1])、 ファイル "csvimport.py"、31行目、assignAircraft 戻り値 UnboundLocalError:割り当て前にローカル変数 'a'が参照されました – user2498975

+0

編集したコードを表示できますか?エラーは、必要なセーブされたインスタンスがないことを意味します。あなたのコードは何をして、DO SOMETHING部分に戻りましたか? – Leonard2

関連する問題