2016-09-30 29 views
0

我試圖在django模型對象中保存ManyToMany字段值。但是當我保存一個錯誤來的int()底座10 我的代碼是當在django中保存ManyToMany字段值時,錯誤發生int()與基數爲10的無效字面積

def saveDetail(request): 

    userExp = str(request.GET.get('user')) 
    tags = request.POST.getlist('tags') 
    comment = request.POST.get('comment') 
    exp = customer.objects.get(user = userExp) 
    exp.tags = tags 
    exp.save() 

,誤差

ValueError: invalid literal for int() with base 10: 'tag2 

我tagExp模型

class TagsExp(models.Model): 


    label=models.CharField(max_length=50,null=True, blank=True) 


    def __unicode__(self): 
     return str(self.label) 

我的客戶模型是

class Customer(models.Model): 

    user = models.OneToOneField(User) remark = models.TextField(null=True, blank=True) 
    tags = models.ManyToManyField(TagsExp, null=True, blank=True) 
    time = models.DateField(null=True) 

我加入了我下面的錯誤的回溯。

回溯:

File "/home/cp/Documents/beta/envBeta/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    149.      response = self.process_exception_by_middleware(e, request) 

File "/home/cp/Documents/beta/envBeta/local/lib/python2.7/site-packages/channels/handler.py" in process_exception_by_middleware 
    227.    return super(AsgiHandler, self).process_exception_by_middleware(exception, request) 

File "/home/cp/Documents/beta/envBeta/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    147.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "/home/cp/Documents/beta/envBeta/local/lib/python2.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view 
    23.     return view_func(request, *args, **kwargs) 

File "/home/cp/Documents/projects/beta/upKonnect/decorators.py" in wrapped 
    12.    return view_func(request, *args, **kwargs) 

File "/home/cp/Documents/projects/beta/adminProfile/views.py" in saveExpDetail 
    506.  exp.tags = tags 

File "/home/cp/Documents/beta/envBeta/local/lib/python2.7/site-packages/django/db/models/fields/related_descriptors.py" in __set__ 
    481.   manager.set(value) 

File "/home/cp/Documents/beta/envBeta/local/lib/python2.7/site-packages/django/db/models/fields/related_descriptors.py" in set 
    910.      self.add(*new_objs) 

File "/home/cp/Documents/beta/envBeta/local/lib/python2.7/site-packages/django/db/models/fields/related_descriptors.py" in add 
    843.     self._add_items(self.source_field_name, self.target_field_name, *objs) 

File "/home/cp/Documents/beta/envBeta/local/lib/python2.7/site-packages/django/db/models/fields/related_descriptors.py" in _add_items 
    986.        '%s__in' % target_field_name: new_ids, 

File "/home/cp/Documents/beta/envBeta/local/lib/python2.7/site-packages/django/db/models/query.py" in filter 
    790.   return self._filter_or_exclude(False, *args, **kwargs) 

File "/home/cp/Documents/beta/envBeta/local/lib/python2.7/site-packages/django/db/models/query.py" in _filter_or_exclude 
    808.    clone.query.add_q(Q(*args, **kwargs)) 

File "/home/cp/Documents/beta/envBeta/local/lib/python2.7/site-packages/django/db/models/sql/query.py" in add_q 
    1243.   clause, _ = self._add_q(q_object, self.used_aliases) 

File "/home/cp/Documents/beta/envBeta/local/lib/python2.7/site-packages/django/db/models/sql/query.py" in _add_q 
    1269.      allow_joins=allow_joins, split_subq=split_subq, 

File "/home/cp/Documents/beta/envBeta/local/lib/python2.7/site-packages/django/db/models/sql/query.py" in build_filter 
    1199.    condition = lookup_class(lhs, value) 

File "/home/cp/Documents/beta/envBeta/local/lib/python2.7/site-packages/django/db/models/lookups.py" in __init__ 
    19.   self.rhs = self.get_prep_lookup() 

File "/home/cp/Documents/beta/envBeta/local/lib/python2.7/site-packages/django/db/models/fields/related_lookups.py" in get_prep_lookup 
    54.      self.lookup_name, self.rhs) 

File "/home/cp/Documents/beta/envBeta/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py" in get_prep_lookup 
    746.    return [self.get_prep_value(v) for v in value] 

File "/home/cp/Documents/beta/envBeta/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py" in get_prep_value 
    976.   return int(value) 

Exception Type: ValueError at /upadmin/save-Exp-Detail/ 
Exception Value: invalid literal for int() with base 10: 'tag2 ' 
+0

你能告訴您的全回溯 –

+0

向我們展示了完整的堆棧跟蹤和request.POST.getlist的'內容(「標籤」)' –

+0

問題我已經添加回溯 – vikrant

回答

1

tagsManyToMany字段。您不能使用直接分配到列表項來更新字段。您應改爲通過字段的add方法標籤對象對應於列表中的項目。

假設你TagsExp有一個字段label相當於在列表中的項目,你會怎麼做:

for tag_label in tags: 
    tag_label = tag_label.strip().lower() # clean up tag 
    tag, _ = TagsExp.objects.get_or_create(label=tag_label) 
    exp.tags.add(tag) 
exp.save() 

在另一方面,在追溯標籤具有尾隨空間。這將創建一個新的標籤,如果沒有清理,而不是獲得現有的標籤。此外,多個案件不會默認處理。我想你應該看看django-taggit應用程序的標記它有很大的功能來管理空白字符和不同情況。

+0

我該如何使用這個添加方法 – vikrant

+0

@ vikrant我已經更新了答案。你也可以顯示你的'TagExp'模型,這樣我就可以改進我的答案。 –

+0

是的它是工作,但它保存重複的標籤 – vikrant

相關問題