2017-06-29 5 views
0

私は一意の制約を持つフィールドを持つモデルを持っています。一意のフィールド値を更新しようとすると、古い行の値を更新する代わりに新しい行が作成されます。いくつかの他のクエリを参照しましたが、解決策を見つけることができませんでした。以下は私のモデルである:一意のフィールド値を更新するdjangoは新しい行を作成します

class AircraftType(models.Model): 
    aircraft_id = models.AutoField(null=False, primary_key=True) 
    aircraft_type = models.CharField(max_length=20, null=False, blank=False, unique=True) 
    aircraft_description = models.TextField() 

と私のviews.py:

def save_aircrafts(request): 
    print "save_aircrafts" 
    aircraft_type = request.POST.get('aircrafttype') 
    print str("Save aircraft_type ") + aircraft_type 
    aircraft_instance = AircraftType.objects.filter(aircraft_type=aircraft_type) 
    if aircraft_instance.exists(): 
     print str("aircraft_instance.exists") + aircraft_type 
     aircraft_instance.update(aircraft_type=aircraft_type) 
     aircraft_instance.aircraft_type = aircraft_type 
     aircraft_instance.save() 
    else: 
     print str("aircraft_instance.NOTexists") + aircraft_type 
     AircraftType.objects.create(aircraft_type=aircraft_type) 
    return redirect('aircraft_list') 

私は私のhtmlファイルからの私save_aircraftsメソッドを呼び出しています。あなたはget_or_create機能を使用することができ

+3

あなたはNameError取得されますので、あなたが今まで、 'if'ブロックに入ることができません:あなたが紛らわしいと呼ばれているものを' aircraft_instance'はです実際にはインスタンスではなくQuerySetであり、それらは 'save'メソッドを持っていません。だから、おそらくあなたが 'else'ブロックに入っていなければなりません。おそらく、あなたが 'aircrafttype'のために使用している値がデータベースに存在しないからです。あなたのプリントステートメントは何を示していますか? –

+0

@Daniel exists()は、フィルタ処理されたクエリーセットで有効なメソッドです。 https://docs.djangoproject.com/en/1.11/ref/models/querysets/#django.db.models.query.QuerySet.exists利用可能でない保存メソッドについてのあなたの意見は正しいですが、 –

+0

はい私はそうではないとは言わなかった。 'exists' *のみ*はクエリーセットで動作しますが、それはまったく問題ではありません。 –

答えて

0

aircraft_instance, created = AircraftType.objects.get_or_create(aircraft_type=aircraft_type) 
if created: 
    print "New object has been created" 
else: 
    #Do what you want to do with instance. 
    aircraft_instance.save() 
関連する問題