Python 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

我试图向模型/表单中添加新的formset字段,但当我想要保存它时,我得到一个错误“值太长,无法更改类型字符(1)”

有人能帮我吗?我在django乞讨。 此错误是在我添加“研究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))
这是我的密码:

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我没有犯错误;我没有注意到这一点。。