2017-06-29 80 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') 

我打電話我save_aircrafts方法從我的HTML文件。

+3

你永遠不能將漸入'if'塊,因爲你會得到一個NameError:你已經被稱爲混淆的東西'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

你可以使用get_or_create功能,

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() 
相關問題