Создайте список объектов из загрузки в формате csv

#django #django-models #django-views #django-forms

Вопрос:

У меня есть модель под названием «лиды». Я загружаю их через CSV. Проблема в том, что я хотел бы назвать каждый из списков потенциальных клиентов при загрузке, чтобы я мог фильтровать и просматривать конкретные списки. Нужно ли мне создавать другую модель под названием список и добавлять в этот список потенциальных клиентов.

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>
 

Ответ №1:

Поскольку вы используете обновление или создание, вы можете просто добавить значение с именем списка, а затем отфильтровать по нему, поэтому во внешнем интерфейсе вам нужно создать ввод и передать его вместе с csv в серверную часть.

Комментарии:

1. Означает ли это, что мне нужно добавить еще одно значение в мою лидирующую модель? Кроме того, как бы я передал это значение в своей форме загрузки csv?

2. 1.- Да, вам нужно другое значение в модели лидов для идентификации списка, или вы можете создать другую модель, подключив ее по внешнему ключу.В этой новой модели вы будете хранить только имя списка и внешний ключ для лидов. 2.- о форме, если вы загружаете по ПОЧТЕ, я предполагаю, что у вас есть функция во внешнем интерфейсе для отправки информации из CSV, поэтому вы просто можете добавить значение вашей формы ввода с именем списка и сохранить все в контексте или у вас есть возможность сохранить имя списка в имени файла и извлечь из файла.