создание дублирующих записей без идентификаторов с использованием django - PullRequest
0 голосов
/ 08 апреля 2020

Я создаю панель управления django, куда пользователи могут загружать свои сертификаты опыта.

Проблема заключается в том, что раздел сертификации отправляет дублированные записи в представление django с пустыми идентификаторами, а логические значения c в представлениях создают дублирующиеся записи в базе данных.

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

сертификат. html

<form method="POST" enctype="multipart/form-data">
         {% csrf_token %}
         {% for c in cert %}

                    <input type="text" name="id" value="{{c.id}}">
                           <label>Month</label>
                           <input type="text" class="form-control" id="field-value" name = "month" value = "{{c.month}}">

                              <label>Year</label>
                              <input type="text" class="form-control" id="field-value" name = "year" value = "{{c.year}}">
                                <label>Company</label>
                                  <select class="form-control" id="field-value" name = "company">
                                 {% if c.company %}
                                <option value = "{{c.company}}">{{c.company}}</option>
                                {% endif %}
                                <option value="Microsoft">Microsoft</option>
                                <option value="TEDx">TEDx</option>
                                <option value="Business Standard">Business Standard</option>
                                <option value="EF Standard English Test">EF Standard English Test</option>
                               <option value="Open2Study">Open2Study</option>
                               <option value="eMarketing Institute">eMarketing Institute</option>
                               <option value="Amazon">Amazon</option>
                               <option value="Airbnb">Airbnb</option>
                               <option value="Adobe">Adobe</option>
                               <option value="Paypal">Paypal</option>
                               <option value="Intel">Intel</option>
                               <option value="eBay">eBay</option>
                               <option value="Beats">Beats</option>
                              </select>

                              <label>Title</label>
                              <input type="text" class="form-control" id="field-value" name = "title" value="{{c.title}}">


                             <label>Certificate</label>
                             <input type="file" class="form-control" id="field-value" name = "img" value="{{c.img}}"> 
                             {% endfor %}
                             <button type="submit" name = "cert-sec" class="btn btn-info">Submit</button>
                             <button type="reset" class="btn btn-dark">Reset</button>
                                </form>

views.py

elif 'cert-sec' in request.POST:
            idi = request.POST.getlist('id')
            month = request.POST.getlist('month')
            year = request.POST.getlist('year')
            company = request.POST.getlist('company')
            title = request.POST.getlist('title')
            img = request.POST.getlist('img')
            print(idi)
            print(len(title))
            for i in range(len(title)):
                certi = Certification(month = month[i], year = year[i], company = company[i], title = title[i], img=img[i])
                if idi[i] is None or idi[i] is '':
                    certi.save()
                elif idi[i] is not None and certi in cert:
                    cer = Certification.objects.get(id = idi[i])
                    #print(edi.id)
                    cer.month = month[i]
                    cer.year = year[i]
                    cer.company = company[i]
                    cer.title = title[i]
                    cer.img = img[i]
            return redirect('homepage')

пожалуйста, срочно нужна помощь. Спасибо.

1 Ответ

0 голосов
/ 08 апреля 2020

Предполагая, что уникальность можно определить, используя вместе заголовок, img и company, вы можете сделать что-то вроде этого:

elif 'cert-sec' in request.POST:
            idi = request.POST.getlist('id')
            month = request.POST.getlist('month')
            year = request.POST.getlist('year')
            company = request.POST.getlist('company')
            title = request.POST.getlist('title')
            img = request.POST.getlist('img')
            print(idi)
            print(len(title))
            comp_list = []
            for i in range(len(title)):
                combined_str = company[i]+title[i]+img[i]
                if combined_str in comp_list:
                    continue
                comp_list.append(combined_str)
                certi = Certification(month = month[i], year = year[i], company = company[i], title = title[i], img=img[i])
                if idi[i] is None or idi[i] is '':
                    certi.save()
                elif idi[i] is not None and certi in cert:
                    cer = Certification.objects.get(id = idi[i])
                    #print(edi.id)
                    cer.month = month[i]
                    cer.year = year[i]
                    cer.company = company[i]
                    cer.title = title[i]
                    cer.img = img[i]
            return redirect('homepage')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...