2016-04-10 22 views
0

Django hata işlemcisinin yeni üyesiyim ve bir hafta boyunca Django formlarını kullanarak bir MySQL tablosunu güncellemeye çalışırken tam olarak neyin yanlış gittiğini anlamaya çalıştım. Ben ValueError: invalid literal for int() with base 10: '\x01' hatası ile biter. Hatalı kodu, catch catch bloğu yakalama valueError ve satır sql sorgusuyla silmeyi denedim, ve işte şunu elde ettim.Taşıma Django form.save() ValueError

kodu:

def updateTask(request, task_id): 
#cur_usr_sale_point = PersonUnique.objects.filter(employees__employeeuser__auth_user = request.user.id).values_list('agreementemployees__agreement_unique__sale_point_id',flat=True) 
selected_task = Tasks.objects.get(id=task_id)  
responsible_people = TaskResponsiblePeople.objects.get(task_id = task_id) 
task_table = Tasks. objects.all() 
if request.method == 'POST': 
    task_form = TaskForm(request.POST,instance=selected_task) 
    responsible_people_form = TaskResponsiblePeopleForm(request.POST, instance = responsible_people) 
    if task_form.is_valid() and responsible_people_form.is_valid(): 
     responsible_people_instance = responsible_people_form.save(commit=False) 
     try: 
      responsible_people_instance.task = task_form.save() 
      responsible_people_form.save() 
     except ValueError: 
      from django.db import connection 
      print connection.queries[-1] 
     return HttpResponseRedirect(reverse('task_list')) 

Baskı bana kesinlikle geçerli MySQL Select-deyimi verir (benim surpise için, ben bir güncelleme-ekstre beklenen). try-catch bloğu olmadan

geri izleme:

Internal Server Error: /task_list/update_task/200/ 
Traceback (most recent call last): 
    File "C:\Python27\lib\site-packages\django\core\handlers\base.py", line 149, in get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "C:\Python27\lib\site-packages\django\core\handlers\base.py", line 147, in get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "\\10.8.0.1\share\djprj\djprj\djprj\task\views.py", line 101, in updateTask 
    task_form.save(); 
    File "C:\Python27\lib\site-packages\django\forms\models.py", line 451, in save 
    self.instance.save() 
    File "C:\Python27\lib\site-packages\django\db\models\base.py", line 700, in save 
    force_update=force_update, update_fields=update_fields) 
    File "C:\Python27\lib\site-packages\django\db\models\base.py", line 728, in save_base 
    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields) 
    File "C:\Python27\lib\site-packages\django\db\models\base.py", line 793, in _save_table 
    forced_update) 
    File "C:\Python27\lib\site-packages\django\db\models\base.py", line 843, in _do_update 
    return filtered._update(values) > 0 
    File "C:\Python27\lib\site-packages\django\db\models\query.py", line 645, in _update 
    return query.get_compiler(self.db).execute_sql(CURSOR) 
    File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py", line 1149, in execute_sql 
    cursor = super(SQLUpdateCompiler, self).execute_sql(result_type) 
    File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py", line 837, in execute_sql 
    sql, params = self.as_sql() 
    File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py", line 1117, in as_sql 
    val = field.get_db_prep_save(val, connection=self.connection) 
    File "C:\Python27\lib\site-packages\django\db\models\fields\__init__.py", line 728, in get_db_prep_save 
    prepared=False) 
    File "C:\Python27\lib\site-packages\django\db\models\fields\__init__.py", line 720, in get_db_prep_value 
    value = self.get_prep_value(value) 
    File "C:\Python27\lib\site-packages\django\db\models\fields\__init__.py", line 1853, in get_prep_value 
    return int(value) 
ValueError: invalid literal for int() with base 10: '\x01' 
[10/Apr/2016 11:15:46] "POST /task_list/update_task/200/ HTTP/1.1" 500 126245 

bana lütfen yardım edin !!!

DÜZENLEME: katma is_valid yöntem

Önce formun is_valid yöntemi kullanmak gerekir

cevap

2

:

bir form örneği tüm alanlar için doğrulama rutinleri çalışan bir is_valid() yöntemi vardır. Bu yöntem çağrıldığında, tüm alanlar geçerli veri içeriyorsa.

from django.shortcuts import render 
from django.http import HttpResponseRedirect 
from .forms import NameForm 

def get_name(request): 
    # if this is a POST request we need to process the form data 
    if request.method == 'POST': 
     # create a form instance and populate it with data from the request: 
     form = NameForm(request.POST) 
     # check whether it's valid: 
     if form.is_valid(): 
      # process the data in form.cleaned_data as required 
      # ... 
      # redirect to a new URL: 
      return HttpResponseRedirect('/thanks/') 

    # if a GET (or any other method) we'll create a blank form 
    else: 
     form = NameForm() 

    return render(request, 'name.html', {'form': form}) 

Kaynak: Django Docs: Working with forms

Ben yukarıdaki belgelere okumanızı öneriyoruz.

+0

is_valid yöntemini ekledim, ancak yine de aynı hata satırında aynı hatayla bitiyorum. –