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
機能を使用することができ
あなたはNameError取得されますので、あなたが今まで、 'if'ブロックに入ることができません:あなたが紛らわしいと呼ばれているものを' aircraft_instance'はです実際にはインスタンスではなくQuerySetであり、それらは 'save'メソッドを持っていません。だから、おそらくあなたが 'else'ブロックに入っていなければなりません。おそらく、あなたが 'aircrafttype'のために使用している値がデータベースに存在しないからです。あなたのプリントステートメントは何を示していますか? –
@Daniel exists()は、フィルタ処理されたクエリーセットで有効なメソッドです。 https://docs.djangoproject.com/en/1.11/ref/models/querysets/#django.db.models.query.QuerySet.exists利用可能でない保存メソッドについてのあなたの意見は正しいですが、 –
はい私はそうではないとは言わなかった。 'exists' *のみ*はクエリーセットで動作しますが、それはまったく問題ではありません。 –