Django 1.11保存表单时,多个字段的文本无效

Django 1.11保存表单时,多个字段的文本无效,django,many-to-many,django-localflavor,Django,Many To Many,Django Localflavor,我有一个具有多对多字段的模型。当我试图保存它时,它会出现一个以10为基数的int()的无效文本:“a”错误。从我读过的其他帖子来看,这似乎与我forms.py中的CharField有关。在我的clean_状态中,我可以打印self.cleaned_data['states']的值,并返回状态的两个字母代码。我以为这就是将要保存到数据库中的内容。我不知道为什么它认为我在试图保存一个int models.py class States(models.Model): state

我有一个具有多对多字段的模型。当我试图保存它时,它会出现一个以10为基数的int()的
无效文本:“a”
错误。从我读过的其他帖子来看,这似乎与我forms.py中的CharField有关。在我的clean_状态中,我可以打印
self.cleaned_data['states']
的值,并返回状态的两个字母代码。我以为这就是将要保存到数据库中的内容。我不知道为什么它认为我在试图保存一个int

models.py

class States(models.Model):
    state           = models.CharField(max_length=2, choices=US_STATES  , null=True, blank=True) 
    def __str__(self):
        return self.state

class Person(models.Model):    
    user            = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    state           = models.ManyToManyField(States)
views.py

class UserProfileUpdateView(LoginRequiredMixin, UpdateView):
    model      = Person
    form_class = UserProfileChangeForm
    template_name = 'accounts/profile-update-view.html'

    def get_context_data(self, *args, **kwargs):
        context = super(UserProfileUpdateView, self).get_context_data(*args, **kwargs)
        context['states'] = States.objects.all()
        return context

    def get_object(self):
        qs = Person.objects.filter(pk=self.request.user.person.user_id).first()

        return qs
forms.py

class UserProfileChangeForm(forms.ModelForm):
    state= forms.CharField(widget=USStateSelect(), initial='TX')
    class Meta:
        model = SkilledLaborer
        fields = ['user','state']

    def clean_user(self):
        user = self.cleaned_data['user']
        return user

    def clean_state(self):          
        state= self.cleaned_data['state']
        return state

    def save(self, *args, **kwargs):
        print('im saving')
        print(self.cleaned_data['states'])
        obj = super(UserProfileChangeForm, self).save(*args, **kwargs)
        print('here2')
        add_states = self.cleaned_data['states']
        print(add_states)
        print('here3')
        if add_states:
            for state in add_states.split(","):
                state = States.objects.get(state=state)
                obj.states.add(state)
        return obj
堆栈跟踪

Traceback:

File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\core\handlers\exception.py" in inner
  41.             response = get_response(request)

File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\core\handlers\base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\core\handlers\base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\views\generic\base.py" in view
  68.             return self.dispatch(request, *args, **kwargs)

File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\contrib\auth\mixins.py" in dispatch
  56.         return super(LoginRequiredMixin, self).dispatch(request, *args, **kwargs)

File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\views\generic\base.py" in dispatch
  88.         return handler(request, *args, **kwargs)

File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\views\generic\edit.py" in post
  240.         return super(BaseUpdateView, self).post(request, *args, **kwargs)

File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\views\generic\edit.py" in post
  183.             return self.form_valid(form)

File "C:\Users\Starlord\Dev\ecommerce\src\accounts\views.py" in form_valid
  174.         form.save()

File "C:\Users\Starlord\Dev\ecommerce\src\accounts\forms.py" in save
  105.         obj = super(UserProfileChangeForm, self).save(*args, **kwargs)

File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\forms\models.py" in save
  469.             self._save_m2m()

File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\forms\models.py" in _save_m2m
  451.                 f.save_form_data(self.instance, cleaned_data[f.name])

File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\db\models\fields\related.py" in save_form_data
  1686.         getattr(instance, self.attname).set(data)

File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\db\models\fields\related_descriptors.py" in set
  1007.                     self.add(*new_objs)

File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\db\models\fields\related_descriptors.py" in add
  934.                 self._add_items(self.source_field_name, self.target_field_name, *objs)

File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\db\models\fields\related_descriptors.py" in _add_items
  1083.                             '%s__in' % target_field_name: new_ids,

File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\db\models\query.py" in filter
  784.         return self._filter_or_exclude(False, *args, **kwargs)

File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\db\models\query.py" in _filter_or_exclude
  802.             clone.query.add_q(Q(*args, **kwargs))

File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\db\models\sql\query.py" in add_q
  1250.         clause, _ = self._add_q(q_object, self.used_aliases)

File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\db\models\sql\query.py" in _add_q
  1276.                     allow_joins=allow_joins, split_subq=split_subq,

File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\db\models\sql\query.py" in build_filter
  1206.             condition = lookup_class(lhs, value)

File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\db\models\lookups.py" in __init__
  24.         self.rhs = self.get_prep_lookup()

File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\db\models\fields\related_lookups.py" in get_prep_lookup
  56.                 self.rhs = [target_field.get_prep_value(v) for v in self.rhs]

File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\db\models\fields\related_lookups.py" in <listcomp>
  56.                 self.rhs = [target_field.get_prep_value(v) for v in self.rhs]

File "C:\Users\Starlord\Dev\ecommerce\lib\site-packages\django\db\models\fields\__init__.py" in get_prep_value
  966.         return int(value)

Exception Type: ValueError at /account/profile/
Exception Value: invalid literal for int() with base 10: 'A'
回溯:
文件“C:\Users\Starlord\Dev\ecommerce\lib\site packages\django\core\handlers\exception.py”位于内部
41响应=获取响应(请求)
文件“C:\Users\Starlord\Dev\ecommerce\lib\site packages\django\core\handlers\base.py”位于\u get\u响应中
187response=self.process\u异常\u由\u中间件(e,请求)
文件“C:\Users\Starlord\Dev\ecommerce\lib\site packages\django\core\handlers\base.py”位于\u get\u响应中
185响应=包装的回调(请求,*回调参数,**回调参数)
视图中的文件“C:\Users\Starlord\Dev\ecommerce\lib\site packages\django\views\generic\base.py”
68返回自调度(请求,*args,**kwargs)
文件“C:\Users\Starlord\Dev\ecommerce\lib\site packages\django\contrib\auth\mixins.py”在dispatch中
56return super(LoginRequiredMixin,self).分派(请求,*args,**kwargs)
文件“C:\Users\Starlord\Dev\ecommerce\lib\site packages\django\views\generic\base.py”位于dispatch中
88返回处理程序(请求、*args、**kwargs)
post中的文件“C:\Users\Starlord\Dev\ecommerce\lib\site packages\django\views\generic\edit.py”
240返回super(BaseUpdateView,self).post(请求,*args,**kwargs)
post中的文件“C:\Users\Starlord\Dev\ecommerce\lib\site packages\django\views\generic\edit.py”
183返回self.form\u有效(form)
文件“C:\Users\Starlord\Dev\ecommerce\src\accounts\views.py”,格式为\u valid
174form.save()
保存中的文件“C:\Users\Starlord\Dev\ecommerce\src\accounts\forms.py”
105obj=super(UserProfileChangeForm,self).save(*args,**kwargs)
保存中的文件“C:\Users\Starlord\Dev\ecommerce\lib\site packages\django\forms\models.py”
469self._save_m2m()
保存m2m中的文件“C:\Users\Starlord\Dev\ecommerce\lib\site packages\django\forms\models.py”
451f、 保存表单数据(self.instance、已清理的表单数据[f.name])
保存表单数据中的文件“C:\Users\Starlord\Dev\ecommerce\lib\site packages\django\db\models\fields\related.py”
1686getattr(实例,self.attname).set(数据)
集合中的文件“C:\Users\Starlord\Dev\ecommerce\lib\site packages\django\db\models\fields\related\u descriptors.py”
1007self.add(*new_objs)
add中的文件“C:\Users\Starlord\Dev\ecommerce\lib\site packages\django\db\models\fields\related\u descriptors.py”
934self.\添加\项(self.source\字段\名称、self.target\字段\名称、*objs)
添加项目中的文件“C:\Users\Starlord\Dev\ecommerce\lib\site packages\django\db\models\fields\related\u descriptors.py”
1083.                             '%“%target\u field\u name:new\u id”中的s\u,
过滤器中的文件“C:\Users\Starlord\Dev\ecommerce\lib\site packages\django\db\models\query.py”
784返回self.\u filter\u或\u exclude(False、*args、**kwargs)
文件“C:\Users\Starlord\Dev\ecommerce\lib\site packages\django\db\models\query.py”位于\u filter\u或\u exclude
802clone.query.add_q(q(*args,**kwargs))
文件“C:\Users\Starlord\Dev\ecommerce\lib\site packages\django\db\models\sql\query.py”位于add\u q中
1250子句,self.\u添加(q\u对象,self.used\u别名)
文件“C:\Users\Starlord\Dev\ecommerce\lib\site packages\django\db\models\sql\query.py”位于\u add\u q中
1276allow_joins=allow_joins,split_subq=split_subq,
内置过滤器中的文件“C:\Users\Starlord\Dev\ecommerce\lib\site packages\django\db\models\sql\query.py”
1206条件=查找类(lhs,值)
文件“C:\Users\Starlord\Dev\ecommerce\lib\site packages\django\db\models\lookups.py”位于\uuu init__
24self.rhs=self.get\u prep\u lookup()
get\u prep\u lookup中的文件“C:\Users\Starlord\Dev\ecommerce\lib\site packages\django\db\models\fields\related\u lookups.py”
56self.rhs=[target_field.get_prep_value(v)for v in self.rhs]
文件“C:\Users\Starlord\Dev\ecommerce\lib\site packages\django\db\models\fields\related\u lookups.py”
56self.rhs=[target_field.get_prep_value(v)for v in self.rhs]
get\u prep\u值中的文件“C:\Users\Starlord\Dev\ecommerce\lib\site packages\django\db\models\fields\\uuuu init\uuuuu.py”
966返回int(值)
异常类型:ValueError位于/account/profile/
异常值:基数为10的int()的文本无效:“A”

是否可以添加堆栈跟踪?已添加堆栈跟踪