Python “我的表单”字段将字符串输入视为无效

Python “我的表单”字段将字符串输入视为无效,python,django,django-forms,Python,Django,Django Forms,我有一个表格,记录潜在客户和当前与销售顾问达成的交易。然而,我在创建交易的过程中被卡住了,因为django在我尝试用字符串输入客户姓氏时,不断给我“ValueError:invalid literal for int(),base 10:”的错误。但是,当我尝试使用integer lastname创建时,表单可以工作 型号.py class Customer(models.Model): name = models.CharField(max_length = 20) surna

我有一个表格,记录潜在客户和当前与销售顾问达成的交易。然而,我在创建交易的过程中被卡住了,因为django在我尝试用字符串输入客户姓氏时,不断给我“ValueError:invalid literal for int(),base 10:”的错误。但是,当我尝试使用integer lastname创建时,表单可以工作

型号.py

class Customer(models.Model):
    name = models.CharField(max_length = 20)
    surname = models.CharField(max_length = 20,blank = True)
    nick_name = models.CharField(max_length = 20,blank = True)
    phone_regex = RegexValidator(regex = r'^\+?\d{10,15}$',message = "Phone number invalid")
    phone_number = models.CharField(validators=[phone_regex],max_length=16)
    second_phone_number = models.CharField(validators=[phone_regex],max_length=16,blank = True)
    date_created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

class Deal(models.Model):
    name = models.CharField(max_length = 50)
    lastname = models.CharField(max_length = 50,blank=True)
    booked_car = models.ForeignKey('BookedCar', on_delete = models.SET_NULL, 
null = True)
    prospect = models.ForeignKey('Customer', on_delete = models.SET_NULL, null = True)
    is_credit = models.BooleanField()
    car_price = models.PositiveIntegerField()
    final_accessories = models.PositiveIntegerField()
    final_campaign = models.PositiveIntegerField()
    final_spending = models.PositiveIntegerField()
def booking_create(request,customer_id):
    customer = get_object_or_404(Customer,pk=customer_id)
    template_name = 'customerDB/booking_create.html'


    if request.method == 'POST':
        form = BookingCreate(request.POST)

        if form.is_valid():
            customer.deal_set.create(name = form.cleaned_data['name'],
                lastname = form.cleaned_data['lastname'],
                booked_car = form.cleaned_data['booked_car'],
                is_credit = form.cleaned_data['is_credit'],
                car_price = form.cleaned_data['car_price'],
                final_accessories = form.cleaned_data['lastname'],
                final_campaign = form.cleaned_data['final_campaign'],
                final_spending = form.cleaned_data['final_spending']
                )
    else:
        form = BookingCreate(initial= {'name':customer.name})

    return render(request,template_name,{'form':form})
class BookingCreate(ModelForm):
    class Meta:
        model = Deal
        fields = '__all__'
urlpatterns = [
    path('<int:customer_id>/',views.detail, name='detail'),
    path('<int:customer_id>/follow_up/', views.follow_up,name = 'follow_up'),
    path('<int:customer_id>/transfer/',views.transfer_view,name= 'transfer_view'),
    path('<int:customer_id>/booking/',views.booking_create,name= 'booking_create'),
]+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
视图.py

class Customer(models.Model):
    name = models.CharField(max_length = 20)
    surname = models.CharField(max_length = 20,blank = True)
    nick_name = models.CharField(max_length = 20,blank = True)
    phone_regex = RegexValidator(regex = r'^\+?\d{10,15}$',message = "Phone number invalid")
    phone_number = models.CharField(validators=[phone_regex],max_length=16)
    second_phone_number = models.CharField(validators=[phone_regex],max_length=16,blank = True)
    date_created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

class Deal(models.Model):
    name = models.CharField(max_length = 50)
    lastname = models.CharField(max_length = 50,blank=True)
    booked_car = models.ForeignKey('BookedCar', on_delete = models.SET_NULL, 
null = True)
    prospect = models.ForeignKey('Customer', on_delete = models.SET_NULL, null = True)
    is_credit = models.BooleanField()
    car_price = models.PositiveIntegerField()
    final_accessories = models.PositiveIntegerField()
    final_campaign = models.PositiveIntegerField()
    final_spending = models.PositiveIntegerField()
def booking_create(request,customer_id):
    customer = get_object_or_404(Customer,pk=customer_id)
    template_name = 'customerDB/booking_create.html'


    if request.method == 'POST':
        form = BookingCreate(request.POST)

        if form.is_valid():
            customer.deal_set.create(name = form.cleaned_data['name'],
                lastname = form.cleaned_data['lastname'],
                booked_car = form.cleaned_data['booked_car'],
                is_credit = form.cleaned_data['is_credit'],
                car_price = form.cleaned_data['car_price'],
                final_accessories = form.cleaned_data['lastname'],
                final_campaign = form.cleaned_data['final_campaign'],
                final_spending = form.cleaned_data['final_spending']
                )
    else:
        form = BookingCreate(initial= {'name':customer.name})

    return render(request,template_name,{'form':form})
class BookingCreate(ModelForm):
    class Meta:
        model = Deal
        fields = '__all__'
urlpatterns = [
    path('<int:customer_id>/',views.detail, name='detail'),
    path('<int:customer_id>/follow_up/', views.follow_up,name = 'follow_up'),
    path('<int:customer_id>/transfer/',views.transfer_view,name= 'transfer_view'),
    path('<int:customer_id>/booking/',views.booking_create,name= 'booking_create'),
]+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
forms.py

class Customer(models.Model):
    name = models.CharField(max_length = 20)
    surname = models.CharField(max_length = 20,blank = True)
    nick_name = models.CharField(max_length = 20,blank = True)
    phone_regex = RegexValidator(regex = r'^\+?\d{10,15}$',message = "Phone number invalid")
    phone_number = models.CharField(validators=[phone_regex],max_length=16)
    second_phone_number = models.CharField(validators=[phone_regex],max_length=16,blank = True)
    date_created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

class Deal(models.Model):
    name = models.CharField(max_length = 50)
    lastname = models.CharField(max_length = 50,blank=True)
    booked_car = models.ForeignKey('BookedCar', on_delete = models.SET_NULL, 
null = True)
    prospect = models.ForeignKey('Customer', on_delete = models.SET_NULL, null = True)
    is_credit = models.BooleanField()
    car_price = models.PositiveIntegerField()
    final_accessories = models.PositiveIntegerField()
    final_campaign = models.PositiveIntegerField()
    final_spending = models.PositiveIntegerField()
def booking_create(request,customer_id):
    customer = get_object_or_404(Customer,pk=customer_id)
    template_name = 'customerDB/booking_create.html'


    if request.method == 'POST':
        form = BookingCreate(request.POST)

        if form.is_valid():
            customer.deal_set.create(name = form.cleaned_data['name'],
                lastname = form.cleaned_data['lastname'],
                booked_car = form.cleaned_data['booked_car'],
                is_credit = form.cleaned_data['is_credit'],
                car_price = form.cleaned_data['car_price'],
                final_accessories = form.cleaned_data['lastname'],
                final_campaign = form.cleaned_data['final_campaign'],
                final_spending = form.cleaned_data['final_spending']
                )
    else:
        form = BookingCreate(initial= {'name':customer.name})

    return render(request,template_name,{'form':form})
class BookingCreate(ModelForm):
    class Meta:
        model = Deal
        fields = '__all__'
urlpatterns = [
    path('<int:customer_id>/',views.detail, name='detail'),
    path('<int:customer_id>/follow_up/', views.follow_up,name = 'follow_up'),
    path('<int:customer_id>/transfer/',views.transfer_view,name= 'transfer_view'),
    path('<int:customer_id>/booking/',views.booking_create,name= 'booking_create'),
]+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
url.py

class Customer(models.Model):
    name = models.CharField(max_length = 20)
    surname = models.CharField(max_length = 20,blank = True)
    nick_name = models.CharField(max_length = 20,blank = True)
    phone_regex = RegexValidator(regex = r'^\+?\d{10,15}$',message = "Phone number invalid")
    phone_number = models.CharField(validators=[phone_regex],max_length=16)
    second_phone_number = models.CharField(validators=[phone_regex],max_length=16,blank = True)
    date_created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

class Deal(models.Model):
    name = models.CharField(max_length = 50)
    lastname = models.CharField(max_length = 50,blank=True)
    booked_car = models.ForeignKey('BookedCar', on_delete = models.SET_NULL, 
null = True)
    prospect = models.ForeignKey('Customer', on_delete = models.SET_NULL, null = True)
    is_credit = models.BooleanField()
    car_price = models.PositiveIntegerField()
    final_accessories = models.PositiveIntegerField()
    final_campaign = models.PositiveIntegerField()
    final_spending = models.PositiveIntegerField()
def booking_create(request,customer_id):
    customer = get_object_or_404(Customer,pk=customer_id)
    template_name = 'customerDB/booking_create.html'


    if request.method == 'POST':
        form = BookingCreate(request.POST)

        if form.is_valid():
            customer.deal_set.create(name = form.cleaned_data['name'],
                lastname = form.cleaned_data['lastname'],
                booked_car = form.cleaned_data['booked_car'],
                is_credit = form.cleaned_data['is_credit'],
                car_price = form.cleaned_data['car_price'],
                final_accessories = form.cleaned_data['lastname'],
                final_campaign = form.cleaned_data['final_campaign'],
                final_spending = form.cleaned_data['final_spending']
                )
    else:
        form = BookingCreate(initial= {'name':customer.name})

    return render(request,template_name,{'form':form})
class BookingCreate(ModelForm):
    class Meta:
        model = Deal
        fields = '__all__'
urlpatterns = [
    path('<int:customer_id>/',views.detail, name='detail'),
    path('<int:customer_id>/follow_up/', views.follow_up,name = 'follow_up'),
    path('<int:customer_id>/transfer/',views.transfer_view,name= 'transfer_view'),
    path('<int:customer_id>/booking/',views.booking_create,name= 'booking_create'),
]+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns=[
路径(“/”,views.detail,name='detail'),
路径('/follow\u up/',views.follow\u up,name='follow\u up'),
路径('/transfer/',views.transfer_view,name='transfer_view'),
路径('/booking/',views.booking\u create,name='booking\u create'),
]+静态(settings.static\u URL,document\u root=settings.static\u root)
booking\u create.html

{% block content %}
<html>

<form action="" method="post">
    {%csrf_token %}
    <h3>booking detail</h3>
    <br/>
    <table>
    {{form.as_table}}
    </table>
    <br/>
    <input type = "submit" value="Submit" class="btn btn-primary"/>
</form> 
    {% endblock %}
{%block content%}
{%csrf_令牌%}
预订详情

{{form.as_table}}
{%endblock%}
完全回溯

Traceback (most recent call last):
  File "C:\Users\Top\project\myvenv\lib\site-packages\django\core\handlers\exception.py", line 35, in inner
    response = get_response(request)
  File "C:\Users\Top\project\myvenv\lib\site-packages\django\core\handlers\base.py", line 128, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\Top\project\myvenv\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\Top\project\mysite\customerDB\views.py", line 199, in booking_create
    final_spending = form.cleaned_data['final_spending']
  File "C:\Users\Top\project\myvenv\lib\site-packages\django\db\models\fields\related_descriptors.py", line 623, in create
    return super(RelatedManager, self.db_manager(db)).create(**kwargs)
  File "C:\Users\Top\project\myvenv\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Users\Top\project\myvenv\lib\site-packages\django\db\models\query.py", line 417, in create
    obj.save(force_insert=True, using=self.db)
  File "C:\Users\Top\project\myvenv\lib\site-packages\django\db\models\base.py", line 729, in save
    force_update=force_update, update_fields=update_fields)
  File "C:\Users\Top\project\myvenv\lib\site-packages\django\db\models\base.py", line 759, in save_base
    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
  File "C:\Users\Top\project\myvenv\lib\site-packages\django\db\models\base.py", line 842, in _save_table
    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
  File "C:\Users\Top\project\myvenv\lib\site-packages\django\db\models\base.py", line 880, in _do_insert
    using=using, raw=raw)
  File "C:\Users\Top\project\myvenv\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Users\Top\project\myvenv\lib\site-packages\django\db\models\query.py", line 1125, in _insert
    return query.get_compiler(using=using).execute_sql(return_id)
  File "C:\Users\Top\project\myvenv\lib\site-packages\django\db\models\sql\compiler.py", line 1280, in execute_sql
    for sql, params in self.as_sql():
  File "C:\Users\Top\project\myvenv\lib\site-packages\django\db\models\sql\compiler.py", line 1233, in as_sql
    for obj in self.query.objs
  File "C:\Users\Top\project\myvenv\lib\site-packages\django\db\models\sql\compiler.py", line 1233, in <listcomp>
    for obj in self.query.objs
  File "C:\Users\Top\project\myvenv\lib\site-packages\django\db\models\sql\compiler.py", line 1232, in <listcomp>
    [self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields]
  File "C:\Users\Top\project\myvenv\lib\site-packages\django\db\models\sql\compiler.py", line 1172, in prepare_value
    value = field.get_db_prep_save(value, connection=self.connection)
  File "C:\Users\Top\project\myvenv\lib\site-packages\django\db\models\fields\__init__.py", line 767, in get_db_prep_save
    return self.get_db_prep_value(value, connection=connection, prepared=False)
  File "C:\Users\Top\project\myvenv\lib\site-packages\django\db\models\fields\__init__.py", line 762, in get_db_prep_value
    value = self.get_prep_value(value)
  File "C:\Users\Top\project\myvenv\lib\site-packages\django\db\models\fields\__init__.py", line 1826, in get_prep_value
    return int(value)
ValueError: invalid literal for int() with base 10: 'Bush'
回溯(最近一次呼叫最后一次):
文件“C:\Users\Top\project\myvenv\lib\site packages\django\core\handlers\exception.py”,第35行,在内部
响应=获取响应(请求)
文件“C:\Users\Top\project\myvenv\lib\site packages\django\core\handlers\base.py”,第128行,在get\U响应中
response=self.process\u异常\u由\u中间件(e,请求)
文件“C:\Users\Top\project\myvenv\lib\site packages\django\core\handlers\base.py”,第126行,在get\U响应中
响应=包装的回调(请求,*回调参数,**回调参数)
文件“C:\Users\Top\project\mysite\customerDB\views.py”,第199行,在booking\u create中
最终支出=表单.已清理的支出数据['final\u Expensing']
文件“C:\Users\Top\project\myvenv\lib\site packages\django\db\models\fields\related\u descriptors.py”,第623行,位于create中
return super(RelatedManager,self.db_manager(db)).create(**kwargs)
文件“C:\Users\Top\project\myvenv\lib\site packages\django\db\models\manager.py”,第82行,在manager\u方法中
返回getattr(self.get_queryset(),name)(*args,**kwargs)
文件“C:\Users\Top\project\myvenv\lib\site packages\django\db\models\query.py”,第417行,在create中
对象保存(force_insert=True,using=self.db)
文件“C:\Users\Top\project\myvenv\lib\site packages\django\db\models\base.py”,第729行,保存
强制更新=强制更新,更新字段=更新字段)
文件“C:\Users\Top\project\myvenv\lib\site packages\django\db\models\base.py”,第759行,在save\u base中
更新=自我。保存表格(原始、cls、强制插入、强制更新、使用、更新字段)
文件“C:\Users\Top\project\myvenv\lib\site packages\django\db\models\base.py”,第842行,在保存表中
结果=self.\u do\u insert(cls.\u base\u manager,using,fields,update\u pk,raw)
文件“C:\Users\Top\project\myvenv\lib\site packages\django\db\models\base.py”,第880行,插入
使用=使用,原始=原始)
文件“C:\Users\Top\project\myvenv\lib\site packages\django\db\models\manager.py”,第82行,在manager\u方法中
返回getattr(self.get_queryset(),name)(*args,**kwargs)
文件“C:\Users\Top\project\myvenv\lib\site packages\django\db\models\query.py”,第1125行,插入
return query.get\u编译器(using=using).execute\u sql(return\u id)
文件“C:\Users\Top\project\myvenv\lib\site packages\django\db\models\sql\compiler.py”,第1280行,在execute\U sql中
对于sql,self.as_sql()中的参数为:
as\U sql中的文件“C:\Users\Top\project\myvenv\lib\site packages\django\db\models\sql\compiler.py”,第1233行
对于self.query.objs中的obj
文件“C:\Users\Top\project\myvenv\lib\site packages\django\db\models\sql\compiler.py”,第1233行,在
对于self.query.objs中的obj
文件“C:\Users\Top\project\myvenv\lib\site packages\django\db\models\sql\compiler.py”,第1232行,在
[self.prepare_值(字段,self.pre_保存值(字段,对象))用于字段中的字段]
文件“C:\Users\Top\project\myvenv\lib\site packages\django\db\models\sql\compiler.py”,第1172行,在prepare\u值中
value=field.get\u db\u prep\u save(value,connection=self.connection)
文件“C:\Users\Top\project\myvenv\lib\site packages\django\db\models\fields\\uuuu init\uuuu.py”,第767行,在get\u db\u prep\u save中
返回self.get_db_prep_值(值,connection=connection,prepared=False)
文件“C:\Users\Top\project\myvenv\lib\site packages\django\db\models\fields\\uuuu init\uuuu.py”,第762行,位于get\u db\u prep\u值中
value=self.get\u prep\u值(value)
文件“C:\Users\Top\project\myvenv\lib\site packages\django\db\models\fields\\uuuu init\uuuu.py”,第1826行,在get\u prep\u值中
返回int(值)
ValueError:基数为10的int()的文本无效:“Bush”

错误几乎肯定来自这一行:

final_accessories = form.cleaned_data['lastname'],
因为
final\u attachments
应该是一个整数,但是您正在传递lastname的值

为了避免这样的问题,您应该真正依赖ModelForm为您创建整个实例的能力。您可以通过
commit=False
方法分配客户实例:

if form.is_valid():
   deal = form.save(commit=False)
   deal.prospect = customer
   deal.save()

粘贴您的
url.py
和其他模型。您需要显示完整的回溯。试图转换为int的是什么?我想您可能在创建对象时遇到了
booked\u car=form.cleaned\u data['booked\u car']的问题。
booked\u car
必须是一个对象或其整数pk。它成功了!另外,感谢您的进一步解释,但是为什么在保存之前不必清理deal=form.save(commit=False)数据?我不理解您的问题-它确实需要清理,这就是为什么我们调用is_valid()。