Динамическое обновление моделей в Django (Javascript, HTML и Python)

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

вот код, который у меня есть на данный момент:

Detail.html

<table class="cert-table">
  <tr>
    <th>Dpt:</th>
    <th>Licence:</th>
    <th>Exp. Date:</th>
    <th>Upload Date:</th>
    <th>File:</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>
  <tr>
    {% for cert in list_of_certs %}
    <td>{{ cert.department }}</td>
    <td>{{ cert.licence }}</td>
    <td>{{ cert.exp }}</td>
    <td>{{ cert.ul_date }}</td>
    <td>{{ cert.file }}</td>
    <div class="upload-tds">
      <td>
        <button class="btn sitebtn{{cert.id}}" id="sitebtn{{cert.id}}" onclick="openUpdateCert()">Update File</button>
      </td>
        <td>
          <div class="upload-tds-hidden" id="form-update-cert-js">
            <form method="post" enctype="multipart/form-data">
              {% csrf_token %}
                {{ cert.file }}
              <button type="submit">Create</button>
            </form>
          </div>
        </td>
      </div>
    </div>
  </tr>
  {% endfor %}
</table>

main.js:

function openUpdateCert() {
  var x = document.getElementById("form-update-cert-js");
  var z = document.getElementById("sitebtn{{cert.id}}");
  if (x.style.display === "block") {
    x.style.display = "none";
    z.style.display = "block";
  } else {
    x.style.display = "block";
    z.style.display = "none";
  }
}

models.py

from django.db import models
from django_resized import ResizedImageField



class Site(models.Model):
    name = models.CharField(max_length=25)
    picture = ResizedImageField(size=[319, 305], upload_to='images/', blank=True, null=True)
    location = models.CharField(max_length=20)

    def __str__(self):
        return self.name


class Certificate(models.Model):
    site = models.ForeignKey(Site, on_delete=models.CASCADE, blank=True, null=True, editable=False)
    department = models.CharField(max_length=4)
    licence = models.CharField(max_length=50)
    exp = models.DateField()
    ul_date = models.DateField(auto_now_add=True)
    file = models.FileField(blank=True, null=True)

    def __str__(self):
        return self.licence

forms.py

from django.contrib.auth.forms import AuthenticationForm, UsernameField
from .models import Site, Certificate
from django.forms import DateInput, ModelForm


class AddSiteForm(ModelForm):
    class Meta:
        model = Site
        fields = '__all__'


class AddCertForm(ModelForm):
    class Meta:
        model = Certificate
        fields = '__all__'
        widgets = {
            'exp': DateInput(attrs={'type': 'date'})
        }

views.url

def detail(request, site_id):
    site1 = get_object_or_404(Site, pk=site_id)
    # ls = AddCertForm.objects.get(id=id)

    current_site_id = site1.name
    update = False
    if request.method == 'POST':
        form = AddCertForm(request.POST, request.FILES)
        print(form.errors)
        if form.is_valid():
            form.instance.site = site1
            form.save(commit=True)
        else:
            print("Form not vailid")
    else:
        form = AddCertForm()
        print('Not Post!')

вот здесь я немного запутался:

Я не уверен в том, как передать идентификатор сертификата в html или как определить, какой сертификат должен быть обновлен, (т.е. какой идентификатор html я должен дать им, чтобы javascript знал, какую кнопку я нажимаю и какой это сертификат)

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

FYI Я вырезал часть кода для удобства просмотра, но если вам нужна дополнительная информация для помощи, просто дайте мне знать, я обновлю его, любая помощь, которую вы можете предоставить, будет очень приветствоваться

Спасибо,

littlejiver

Вернуться на верх