Good day, please tell me how to do that on one page, there were 2 download buttons (when creating an item, I need to load 2 different lists from 2 different files). My version at point-blank does not see the second file, and if you download the first one, the button for adding the second file disappears altogether.
views.py:
def add_company_view(request): cur_user = request.user.username if request.method == 'POST': add_company = AddCompanyForm(request.POST) add_keys = AddKeysForm(request.POST, request.FILES) add_tank_id = AddIdTankForm(request.POST, request.FILES) if add_company.is_valid(): new_company = add_company.save() messages.add_message(request, messages.SUCCESS, 'Компания успешно зарегистрирована.') try: key_doc = request.FILES['key_file'].read().decode().split() key_counter = 0 for key in key_doc: if len(key) == 16 and all(c in string.hexdigits for c in key): try: KeyStore.objects.get(keys=key) messages.add_message(request, messages.ERROR, 'Ключ ' + key + ' уже существует в БД.') except KeyStore.DoesNotExist: new_key = KeyStore(keys=key, company=new_company) new_key.save() key_counter += 1 else: messages.add_message(request, messages.ERROR, 'Ключ ' + key + ' некорректен.') messages.add_message(request, messages.INFO, 'Добавлено ' + str(key_counter) + ' ключей из ' + str(len(key_doc)) + '.') tank_id_doc = request.FILES['id_tank_file'].read().decode().split() tank_id_counter = 0 for tank_id in tank_id_doc: try: IdTank.objects.get(tank_id=tank_id) messages.add_message(request, messages.ERROR, 'Номер датчика ' + tank_id + 'уже существует') except IdTank.DoesNotExist: new_tank_id = IdTank(tank_id=tank_id, company=new_company) new_tank_id.save() tank_id_counter += 1 messages.add_message(request, messages.INFO, 'Добавленно ' + str(tank_id_counter) + 'номеров датчиков из ' + str(len(tank_id_doc) + '.')) except MultiValueDictKeyError: add_keys = AddKeysForm() add_tank_id = AddIdTankForm() else: add_company = AddCompanyForm() add_keys = AddKeysForm() add_tank_id = AddIdTankForm() return render(request, 'local_admin/add_company.html', {'cur_user': cur_user, 'add_company': add_company, 'add_keys': add_keys, 'add_tank_id': add_tank_id}) forms.py:
class AddCompanyForm(forms.ModelForm): class Meta: model = Company fields = {'name', 'comment'} widgets = {'name': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Название', 'required': 'True', 'maxlength': 100}), 'comment': forms.Textarea(attrs={'class': 'form-control', 'placeholder': 'Комментарий'})} class AddKeysForm(forms.Form): key_file = forms.FileField(label='', required=False) class AddIdTankForm(forms.Form): id_tank_file = forms.FileField(label='', required=False) models.py:
class KeyStore(models.Model): keys = models.CharField(max_length=16, unique=True) company = models.ForeignKey(Company) owned = models.BooleanField(default=False) def __str__(self): return self.keys class IdTank(models.Model): tank_id = models.CharField(max_length=16, unique=True) company = models.ForeignKey(Company) owned = models.BooleanField(default=False) def __str__(self): return self.tank_id html:
<div class="container"> <div class="panel panel-default panel-my"> <div class="panel-heading panel-heading-my"><h4>Добавить компанию</h4></div> <div class="jumbotron"> <form method="post" enctype="multipart/form-data"> {% csrf_token %} {{ add_company.name }} {{ add_company.comment }} <div class="btn-group-vertical" role="group" aria-label="..."> <span class="btn btn-file"> <i class="icon-plus"> </i><span>Файл ключей</span> {{ add_keys }} </span> <span class="btn btn-file"> <i class="icon-plus"> </i><span>Файл номеров датчиков</span> {{ add_tank_id }} </span> </div> <div class="row"> <div class="col-md-3 col-md-offset-9"> <button class="btn btn-block btn-lg btn-file" type="submit">Добавить</button> </div> </div> </form> </div> </div> </div> Thank you in advance!