Python Django错误/值太长,无法更改类型字符(1)
我试图向模型/表单中添加新的formset字段,但当我想要保存它时,我得到一个错误“值太长,无法更改类型字符(1)” 有人能帮我吗?我在django乞讨。 此错误是在我添加“研究1”字段时开始显示的 在视图中Python Django错误/值太长,无法更改类型字符(1),python,django,postgresql,django-forms,formsets,Python,Django,Postgresql,Django Forms,Formsets,我试图向模型/表单中添加新的formset字段,但当我想要保存它时,我得到一个错误“值太长,无法更改类型字符(1)” 有人能帮我吗?我在django乞讨。 此错误是在我添加“研究1”字段时开始显示的 在视图中 if university and field: new_obj.append(UserLink(user=user, university=university, city_1=city_1, grade=grade, fi
if university and field:
new_obj.append(UserLink(user=user, university=university, city_1=city_1, grade=grade, field=field, description_1 = description_1, study_1 = study_1))
这是我的密码:
views.py:
@login_required
def profile_settings(request):
user = request.user
LinkFormSet = formset_factory(LinkForm, formset=BaseLinkFormSet)
# Get our existing link data for this user. This is used as initial data.
user_links = UserLink.objects.filter(user=user)
link_data = [{'university': l.university, 'city_1': l.city_1, 'grade': l.grade, 'field': l.field, 'description_1': l.description_1, 'study_1': l.study_1,}
for l in user_links]
#lfs = formset_factory(NameForm)
if request.method == 'POST':
#postedformset = lfs(request.POST)
#return HttpResponseRedirect('/edit_profile/')
link_formset = LinkFormSet(request.POST)
if link_formset.is_valid():
# Now save the data for each form in the formset
new_obj = []
for link_form in link_formset:
university = link_form.cleaned_data.get('university')
city_1 = link_form.cleaned_data.get('city_1')
grade = link_form.cleaned_data.get('grade')
field = link_form.cleaned_data.get('field')
description_1 = link_form.cleaned_data.get('description_1')
study_1 = link_form.cleaned_data.get('study_1')
if university and field:
new_obj.append(UserLink(user=user, university=university, city_1=city_1, grade=grade, field=field, description_1 = description_1, study_1 = study_1))
try:
with transaction.atomic():
#Replace the old with the new
UserLink.objects.filter(user=user).delete()
UserLink.objects.bulk_create(new_obj)
# And notify our users that it worked
messages.success(request, 'You have updated your profile.')
except IntegrityError: #If the transaction failed
messages.error(request, 'There was an error saving your profile.')
return redirect(reverse('profile_settings'))
else:
#form = NameForm()
link_formset = LinkFormSet(initial=link_data)
context = {
'link_formset': link_formset,
#'form':lfs,
}
return render(request, 'edit_profile.html', context)
forms.py:
YEARS_CHOICES = tuple((str(n), str(n)) for n in range(1990, datetime.now().year + 1))
class LinkForm(forms.Form):
university = forms.CharField(
max_length=100,
widget = forms.TextInput(attrs = {'placeholder': 'University',}), required = False)
grade = forms.CharField(
max_length = 50,
widget = forms.TextInput(attrs = {'placeholder': 'Grade',}), required = False)
field = forms.CharField(
max_length = 50,
widget = forms.TextInput(attrs = {'placeholder': 'Field of study',}), required = False)
city_1 = forms.CharField(
max_length = 50,
widget = forms.TextInput(attrs = {'placeholder': 'City',}), required = False)
description_1 = forms.CharField(
max_length = 500,
widget=forms.Textarea(attrs={'placeholder': ('Add some details about your education...'),'rows': '5', 'cols': '40',}), required=False)
study_1 = forms.ChoiceField(
choices=YEARS_CHOICES,
required=False)
models.py:
YEARS_CHOICES = tuple((str(n), str(n)) for n in range(1925, datetime.now().year + 1))
class UserLink(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=('user'), related_name='links')
university = models.CharField(max_length = 100)
grade = models.CharField(max_length = 50)
field = models.CharField(max_length = 50)
city_1 = models.CharField(max_length=50)
description_1 = models.TextField(max_length=350)
study_1 = models.CharField(max_length=1, default=0)
def __str__(self):
return self.university
def save(self, *args, **kwargs):
super(UserLink, self).save(*args, **kwargs)
并编辑_profile.html:
<form method="post">
{% csrf_token %}
{{ link_formset.management_form }}
{{ form.management_form }}
<legend style="font-size: 23px;"> Update your education part</legend>
{% for link_form in link_formset %}
<div class="link-formset">
<div style="border-style:groove; border-radius: 8px; padding: 12px 0 0 7px;">
<p style="font-size:15px">University:
{{ link_form.university }}
{% if link_form.university.errors %}
{% for error in link_form.university.errors %}
{{ error|escape }}
{% endfor %}
{% endif %}</p>
<p style="font-size:15px">City:
{{ link_form.city_1 }}
{% if link_form.city_1.errors %}
{% for error in link_form.city_1.errors %}
{{ error|escape }}
{% endfor %}
{% endif %}</p>
<p style="font-size:15px">Grade:
{{ link_form.grade }}
{% if link_form.grade.errors %}
{% for error in link_form.grade.errors %}
{{ error|escape }}
{% endfor %}
{% endif %}</p>
<p style="font-size:15px">Field of study:
{{ link_form.field }}
{% if link_form.field.errors %}
{% for error in link_form.field.errors %}
{{ error|escape }}
{% endfor %}
{% endif %}</p>
<p style="font-size:15px">Description:
{{ link_form.description_1 }}
{% if link_form.description_1.errors %}
{% for error in link_form.description_1.errors %}
{{ error|escape }}
{% endfor %}
{% endif %}</p>
<p style="font-size:15px">Rok:
{{ link_form.study_1 }}
{% if link_form.study_1.errors %}
{% for error in link_form.study_1.errors %}
{{ error|escape }}
{% endfor %}
{% endif %}</p>
{{ form }}
</div>
</div>
{% endfor %}
{% if link_formset.non_form_errors %}
{% for error in link_formset.non_form_errors %}
{{ error|escape }}
{% endfor %}
{% endif %}
<input type="submit" value="Update Profile" class="button"/>
</form>
{%csrf_令牌%}
{{link\u formset.management\u form}
{{form.management_form}}
更新你的教育部分
{link_formset%}中的link_表单为%
大学:
{{link_form.university}
{%if link_form.university.errors%}
{%for link_form.university.errors%中的错误}
{{error | escape}
{%endfor%}
{%endif%}
城市:
{{link_form.city_1}}
{%if link_form.city_1.errors%}
{link_form.city_1.errors%}
{{error | escape}
{%endfor%}
{%endif%}
等级:
{{link_form.grade}
{%if link_form.grade.errors%}
{链接_form.grade.errors%}中的错误为%
{{error | escape}
{%endfor%}
{%endif%}
学习领域:
{{link_form.field}
{%if link_form.field.errors%}
{%for link_form.field.errors%中的错误}
{{error | escape}
{%endfor%}
{%endif%}
描述:
{{link_form.description_1}}
{%if link\u form.description\u 1.errors%}
{%的链接中出现错误。\u form.description\u 1.errors%}
{{error | escape}
{%endfor%}
{%endif%}
韩国:
{{link_form.study_1}}
{%if link_form.study_1.errors%}
{link_form.study_1.errors%}
{{error | escape}
{%endfor%}
{%endif%}
{{form}}
{%endfor%}
{%if link\u formset.non\u form\u errors%}
{link_formset.non_form_errors%}
{{error | escape}
{%endfor%}
{%endif%}
谢谢你的帮助!
:)您已声明
study\u 1
是一个最大长度为1个字符的字符字段,但您将其设置为表示年份的四位字符串。将study\u 1
的最大长度更改为4或更多,然后通过python manage.py makemigrations
对更改进行迁移。最后,通过python manage.py migrate
应用更改,我在这里遇到了错误:UserLink.objects.bulk\u create(new\u obj),那么我应该怎么做?我将max_length更改为4,但仍然得到相同的错误。您是如何“更改”长度的?您是否进行并运行了迁移?在任何情况下,一年都是一个整数,所以你应该使用整数域。好吧,我忘记了迁移,我想我习惯性地这么做了:/现在一切都好了,非常感谢你:D我没有犯错误;我没有注意到这一点。。