【问题标题】:Create list of objects from csv upload从 csv 上传创建对象列表
【发布时间】:2021-10-18 17:02:13
【问题描述】:

我有一个模型,称为潜在客户。我通过 CSV 上传它们。问题是我想在上传时命名每个潜在客户列表,以便我可以过滤和查看特定列表。我是否需要创建另一个名为 list 的模型并将潜在客户添加到该列表中。

Models.py

class Lead(models.Model):
  first_name = models.CharField(max_length=20)
  last_name = models.CharField(max_length=20)
  address = models.CharField(default=0, max_length=50)
  city = models.CharField(max_length=30, default="")
  state = models.CharField(max_length=20, default="")
  zipcode = models.IntegerField(default=0)
  phone = models.CharField(max_length=10, null=True, default="", blank=True)
  email = models.EmailField(default="")

  def __str__(self):
   return f"{self.first_name} {self.last_name}"

View.py

def csv_upload(request):

  template = "leads/lead_csv_upload.html"
  data = Lead.objects.all()

  prompt = {
    'order': 'Order of the CSV should be name, email, address,    
      phone, profile',
    'profiles': data    
          }
  if request.method == "GET":
    return render(request, template, prompt)
  csv_file = request.FILES['file']

  if not csv_file.name.endswith('.csv'):
    messages.error(request, 'THIS IS NOT A CSV FILE')
  data_set = csv_file.read().decode('UTF-8')
  io_string = io.StringIO(data_set)
  next(io_string)
  for column in csv.reader(io_string, delimiter=',', quotechar="|"):
    _, created = Lead.objects.update_or_create(
        first_name=column[0],
        last_name=column[1],
        address=column[2],
        city=column[3],
        state=column[4],
        zipcode=column[5],
        phone=column[6],
        email=column[7],
  
    )
  context = {}
  return render(request, template, context)

Csv_upload.html

<form action="" method="POST" enctype="multipart/form-data">
    
    <label for="file1"> Upload a file </label>
    <input type="file" id="file1" name="file">
    
    <button type="submit">Upload</button>
</form>

【问题讨论】:

    标签: django django-models django-views django-forms


    【解决方案1】:

    因为您使用更新或创建,您可以简单地添加一个带有列表名称的值,然后您可以通过它进行过滤,因此在前端您需要创建一个输入并将其与 csv 一起传递到后端。

    【讨论】:

    • 这是否意味着我需要为我的主要模型添加另一个值?另外我将如何在我的 csv 上传表单中传递该值?
    • 1.- 是的,您需要先导模型中的另一个值来识别列表,或者您可以在这个新模型中创建其他模型通过外键连接它,您只会存储列表的名称和 LEADS 的外键。 2.-关于表单,如果您通过 POST 上传,我假设您在前端具有从 CSV 发送信息的功能,因此,您只需将输入表单的值与列表名称添加并存储所有在上下文中,或者您可以选择将列表的名称存储在文件名中并从文件中提取。
    猜你喜欢
    • 2022-01-14
    • 2020-08-31
    • 1970-01-01
    • 2011-09-07
    • 2017-05-04
    • 2017-06-26
    • 1970-01-01
    • 2018-01-02
    • 2018-05-25
    相关资源
    最近更新 更多