Django - Обновление поля модели через форму
У меня есть модель, которая представляет значения, которые пользователи отправляют через форму при подаче заявки на спонсорство.
class ApplicationData(models.Model) :
class Status(models.TextChoices):
REJECTED = 'Rejected'
PENDING = 'Pending'
ACCEPTED = 'Accepted'
"""Define table for Applications in database"""
user = models.ForeignKey(User, on_delete=models.DO_NOTHING)
organisationName = models.CharField(max_length=200, null=True, blank=True)
projectTitle = models.CharField(max_length=200, null=True, blank=True)
CH_OSCR_number = models.CharField(max_length=20, unique=True, blank=True, null=True, )
projectDesc = models.TextField(max_length=300, null=True, blank=True)
userGroupDesc = models.TextField(max_length=300, null=True, blank=True)
learningOpp = models.TextField(max_length=300, null=True, blank=True)
keyPartnersWork = models.TextField(max_length=300, null=True, blank=True)
projImpactClimate = models.TextField(max_length=300, null=True, blank=True)
projSupportLocBus = models.TextField(max_length=300, null=True, blank=True)
proContribution = models.TextField(max_length=300, null=True, blank=True)
length = models.IntegerField(null=True, blank=True)
application_complete = models.BooleanField(default=False)
date_of_application = models.DateField(null=True, blank=True)
reviewed = models.BooleanField(default=False)
app_status = models.TextField(choices = Status.choices, default = Status.PENDING)
В системе существует 3 различных типа пользователей. После того, как заявитель подает заявку, сотрудники могут просматривать детали поданной заявки на специальной странице. Я пытаюсь добавить форму на эту страницу, где сотрудники смогут изменить статус заявки (app_status в модели).
Вот мои попытки: Вот форма для обновления поля.
class UpdateAppStatus(forms.ModelForm):
class Meta:
model = ApplicationData
fields = ('app_status',)
labels = {'app_status':'Change application status?'}
Это представление - оно отображает детали приложения, и я также пытаюсь добавить эту функциональность для обновления статуса.
def view_application_status(request, id):
admin = True if request.user.is_superuser else False
application = ApplicationData.objects.get(id = id)
application_form = ApplicationForm(instance=application)
comments = Comments.objects.filter(application = application)
if request.user.is_staff:
statusform = UpdateAppStatus()
if request.method == 'POST':
satusform = UpdateAppStatus(request.POST)
if satusform.is_valid():
statusform.save()
else:
print(satusform.errors)
return render(request, 'fund/application_view.html', {'application':application, 'application_form' :application_form, 'comments':comments, 'admin':admin,'statusform':statusform})
print(comments)
for comment in comments:
print(comment.comment)
else:
return render(request, 'fund/application_view.html', {'application':application, 'application_form' :application_form, 'comments':comments, 'admin':admin})
А вот html часть:
<main role="main" class="inner cover">
<div class="container-fluid">
<div class="cover-container d-flex h-100 p-3 mx-auto flex-column">
<h1 class="cover-heading text-center">Application Status</h1>
<div class="cover-container d-flex h-100 p-3 mx-auto flex-column">
{% if request.user.is_staff %}
<form id = "ReviewForm" method="post" action="" enctype="multipart/form-data">
{% csrf_token %}
<label for="app_status"><strong>{{statusform.app_status.label}}</strong></label>
{{ statusform.app_status }}
<input type="submit" value="Submit" class="btn btn-primary" onclick="">
</form>
{% endif %}
</div>
Итак, я пытаюсь добиться того, чтобы сотрудники могли изменять значение поля app_status с помощью этой формы, которая отображается на странице просмотра статуса приложения. Я считаю, что проблема в функции просмотра, но мне не удалось найти решение.