Django 1.11保存表单时,多个字段的文本无效
我有一个具有多对多字段的模型。当我试图保存它时,它会出现一个以10为基数的int()的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
无效文本:“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”
是否可以添加堆栈跟踪?已添加堆栈跟踪