Динамическое обновление моделей в 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