【问题标题】:Set null arraylist Django设置空数组列表 Django
【发布时间】:2020-10-01 14:52:25
【问题描述】:

如何设置数组列表的 null 或空值以插入 id autoincrement ,我已经尝试过“None”,但它返回错误。谁能帮帮我?

错误元组索引必须是整数或切片,而不是 NoneType

views.py

def upload_excel_file(request):
    if request.method =='POST':
        person_resource = PersonResource()
        dataset = Dataset()
        new_person = request.FILES['myfile']

        if not new_person.name.endswith('xlsx'):
            messages.info(request,'wrong format')
            return render (request,'dashboard.html')
        imported_data = dataset.load(new_person.read(),format="xlsx")
        for data in imported_data:
            value = Person(
                data[None],  // It should Empty value 
                data[1],
                data[2],
                data[3],
                data[4],
                data[5]
            )
            value.save()
    return render(request,'dashboard.html')

model.py

class Person(models.Model):
   person_id = models.AutoField(primary_key=True)
   covid_id = models.CharField(max_length=50)
   firstname = models.CharField(max_length=50)
   middle = models.CharField(max_length=50)
   lastname   = models.CharField(max_length=50,blank=True)
   extension  = models.CharField(max_length=50)

【问题讨论】:

  • 显示你的 Person 模型
  • @Andrey Maslov 谢谢你的回复 我已经在上面添加了我的模型

标签: python django


【解决方案1】:

你可以跳过你的 auto_id_field

value = Person(
                covid_id=data[1],
                firstname=data[2],
                middle=data[3],
                lastname=data[4],
                extension=data[5]
            )

【讨论】:

    【解决方案2】:

    在 django 中为模型字段设置空值。您可以简单地将 None 值分配给 字段。所以:

    def upload_excel_file(request):
        if request.method =='POST':
            person_resource = PersonResource()
            dataset = Dataset()
            new_person = request.FILES['myfile']
    
            if not new_person.name.endswith('xlsx'):
                messages.info(request,'wrong format')
                return render (request,'dashboard.html')
            imported_data = dataset.load(new_person.read(),format="xlsx")
            for data in imported_data:
                value = Person(
                    None,  # <--  Now null value is given to the field
                    data[1],
                    data[2],
                    data[3],
                    data[4],
                    data[5]
                )
                value.save()
        return render(request,'dashboard.html')
    

    【讨论】:

      【解决方案3】:

      请不要使用位置参数。它使读取传递什么值的字段变得更加困难。您可以使用可迭代解包位置参数:

      for __, covid, first, mid, last, ext, *__ in imported_data:
          value = Person.objects.create(
              covid_id=covid,
              firstname=first,
              middle=mid,
              lastname=last,
              extension=ext
          )

      通过使用.create(…) [Django-doc],您已经在同一语句中将对象保存到数据库中。

      【讨论】:

      • 谢谢!你对我有很大帮助
      猜你喜欢
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-03
      • 2015-01-31
      • 2017-06-28
      • 1970-01-01
      相关资源
      最近更新 更多