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')
我打電話我save_aircrafts
方法從我的HTML文件。
你永遠不能將漸入'if'塊,因爲你會得到一個NameError:你已經被稱爲混淆的東西'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' *只*用於查詢集,根本不是問題。 –