2014-06-27 39 views
2

當我嘗試使用表單更新Django中的記錄時,出現錯誤。我得到一個錯誤,那個號碼的記錄已經存在。以下是我的模型和觀點。這真的讓我瘋狂。我雖然Django只是更新記錄而不是試圖寫一個新的記錄。Django表更新記錄問題

class Report(models.Model): 
    report_number = models.CharField(max_length=4, unique=True) 
    detected = models.CharField(max_length=40) 
    computer_name = models.CharField(max_length=40) 
    username = models.CharField(max_length=15) 
    cab_date_time = models.CharField(max_length=40) 
    collector = models.CharField(max_length=40) 
    addresses = models.TextField() 
    fault = models.CharField(max_length=40) 
    known_malware = models.TextField(default='No') 
    collected_files = models.TextField(default='None') 
    registry_keys = models.TextField() 
    service_number = models.CharField(max_length=15, blank=True) 
    notes = models.TextField(blank=True) 
    sample_requested = models.CharField(max_length=4, blank=True) 
    action = models.CharField(max_length=35, blank=True) 

,並查看

def reports(request, report_number): 
    instance = get_object_or_404(Report, report_number=report_number) 
    form = ReportForm(request.POST or None, instance=instance) 
    if form.is_valid(): 
     form.save() 
     return HttpResponseRedirect('/') 
    return render(request, 'reports/report.html', {'form': form}) 

這裏是形式認定中

from django.forms import ModelForm 
from reports.models import Report 

class ReportForm(ModelForm): 
    class Meta: 
     model = Report 
     exclude = ('moderator',) 
+0

沒有你的看法需要一些'如果request.method == 'POST':'來單獨爲GET/POST請求返回的表單? – fpghost

+0

我補充說,在我的測試過程中,保存時似乎沒有什麼區別。我仍然不斷獲得相同的record_number已經存在,而不是更新記錄。 – user2646288

+1

@ user2646288你可以添加你的表單邏輯。 – cchristelis

回答

0
def reports(request, report_number): 
    instance = get_object_or_404(Report, report_number=report_number) 
    if request.method == 'POST': 
     form = ReportForm(request.POST, instance=instance) 
     if form.is_valid(): 
      form.save(force_update=True) 
      return HttpResponseRedirect('/') 
    else: 
     form = ReportForm(instance=instance) 
    return render(request, 'reports/report.html', {'form': form}) 
+0

我改變了視圖以反映這一點,但我仍然得到相同的錯誤。任何人都知道如何使用validate_unique?我找不到我明白的例子。 – user2646288

+0

@ user2646288我可以推薦的最後一件事是嘗試通過在save方法中指定'force_update = True'來明確告訴save方法更新。 (見我更新的解決方案) – cchristelis