#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, поэтому вы просто можете добавить значение вашей формы ввода с именем списка и сохранить все в контексте или у вас есть возможность сохранить имя списка в имени файла и извлечь из файла.