Обновление поля выбора при наступлении события в Django
Я хочу, чтобы CharField
автоматически обновлялся на один из вариантов выбора, когда пользователь нажимает на определенную кнопку. Поэтому я определил модель следующим образом:
models.py
:
class Oficio(models.Model):
class Estatus(models.TextChoices):
NUEVO = 'NU', _('Nuevo')
NO_REVISADO = 'NR', _('No Revisado')
LEIDO = 'L', _('Leido')
SEGUIMIENTO = 'S', _('Seguimiento')
COMPLETADO = 'C', _('Completado')
folio = models.CharField(primary_key=True, max_length=10, unique=True, null=False)
usuario = ForeignKey('users.Usuarios', on_delete=models.PROTECT)
fecha = models.DateTimeField(auto_now_add=True)
asunto = models.TextField(null=False)
estatus = models.CharField(max_length=2, choices=Estatus.choices, default=Estatus.NUEVO)
documento = models.FileField(upload_to='static/pdf')
dependencia = models.ForeignKey('Dependencia', on_delete=models.CASCADE, related_name='dependencia_origen')
turnado = models.ForeignKey('Dependencia', on_delete=models.CASCADE, related_name='dependencia_destino')
def __str__(self):
return self.folio
При создании нового объекта этой модели значение по умолчанию поля estatus
равно Nuevo
.
В моем шаблоне этот объект отображается следующим образом:
И я хочу обновить этот тег Nuevo
синим цветом на другой (один из вариантов, определенных в models.py
), когда пользователь нажимает кнопку рядом с ним, которая загружает файл поля documento
.
template.html
для этой кнопки:
<form method="POST" action="{% url 'oficios:status' oficio.folio %}">
{% csrf_token %}
<button type="submit" class="btn btn-primary btn-lg" title="Descargar">
<a href="{{oficio.documento.url}}" download>
<i class="fas fa-file-download"></i>
</a>
</button>
</form>
Пока я пытался создать функцию в views.py
следующим образом:
def change_status(request, pk):
oficio = Oficio.objects.get(folio=pk)
form_status = forms.UpdateStatus(instance=oficio)
context = {'form_status': form_status}
if oficio.estatus == 'NU':
if request.method == 'POST':
oficio.estatus = 'L'
form_status = forms.UpdateStatus(request.POST, instance=oficio)
if form_status.is_valid():
instance = form_status.save(commit=False)
instance.usuario = request.user
instance.save()
return redirect('oficios:list')
return render(request, "oficios_confirmacion.html", context)
forms.py
class UpdateStatus(forms.ModelForm):
class Meta:
model = models.Oficio
fields = ['estatus']
Но эта функция перенаправляет меня в другой шаблон, в котором пользователь должен выбрать из выпадающего меню один из вариантов для этого поля, вот так:
Это работает хорошо, но я хочу оставаться в шаблоне первого изображения и изменять это поле автоматически при загрузке документа нажатием соответствующей кнопки. Есть идеи, как этого добиться? Заранее спасибо.