Как обновить пользовательскую приборную панель Django
Я создаю пользовательскую приборную панель, которая будет доступна только для службы поддержки компании. Эта команда поддержки будет получать жалобы из контактной формы, но мы хотим иметь возможность указывать каждую жалобу, которая была решена, на приборной панели как resolved после того, как она была рассмотрена.
Поэтому я создал поле выбора (ожидающий и решенный), которое я назвал статус. Это поле не отображается для пользователя в контактной форме, а на бэкенде оно по умолчанию имеет значение 'pending'.
Смотрите модель контакта, как показано ниже
class Contact(models.Model):
STATUS_CHOICE = (
("1", "Pending"),
("2", "Resolved"),
)
name = models.CharField(max_length=100)
phone = models.CharField(max_length=15)
email = models.EmailField(max_length=254)
subject = models.CharField(max_length=100)
status = models.CharField(choices=STATUS_CHOICE, default="1", max_length=50, null=True, blank=True)
created = models.DateTimeField(auto_now_add=True)
body = models.TextField()
class Meta:
ordering = ["-created"]
verbose_name_plural = "Contacts"
def __str__(self):
return f"Message from: {self.name}"
смотрите мой forms.py:
class ContactForm(forms.Form):
name = forms.CharField(max_length=100, required=True)
phone = forms.CharField(max_length=15, required=True)
email = forms.EmailField(max_length=100, required=True)
subject = forms.CharField(max_length=100, required=True)
body = forms.CharField(required=True, label='Message', widget=forms.Textarea())
class Meta:
model = Contact
fields = ['name', 'phone', 'email', 'subject', 'body']
captcha = ReCaptchaField(widget=ReCaptchaV2Checkbox)
Смысл приведенного ниже представления заключается в том, чтобы гарантировать, что все пользователи, которые связываются с компанией с помощью контактной формы, получают электронное письмо, и что эта информация также сохраняется в базе данных. Это работает нормально.
def contact(request):
form = ContactForm()
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
name = form.cleaned_data['name']
phone = form.cleaned_data['phone']
email = form.cleaned_data['email']
subject = form.cleaned_data['subject']
body = form.cleaned_data['body']
contact = Contact.objects.create(
name=name, phone=phone, email=email, subject=subject, body=body)
html = render_to_string('pages/emails/contact_form_sub.html', {
'name': name,
'phone': phone,
'email': email,
'subject': subject,
'body': body,
})
send_mail(subject='This message is from me', message='Hello world', from_email='codewithafripoint@gmail.com', recipient_list=[email], html_message=html)
messages.success(request, 'Thank you for reaching out, we will get back to you.')
form = ContactForm()
context = {
"form": form
}
return redirect('pages:contact')
else:
for key, error in list(form.errors.items()):
if key == 'captcha' and error[0] == 'This field is required.':
messages.error(request, "You MUST pass the reCaptcha test!")
continue
messages.error(request, error)
context = {
"form": form,
}
return render(request, 'pages/contact.html', context)
Проблема, с которой я сталкиваюсь, заключается в том, как обеспечить, чтобы после разрешения каждой жалобы/контакта/проблемы команда поддержки могла обновить статус до Resolved в отличие от статуса по умолчанию Pending.
Я пробовал это, но, похоже, это дает мне 'None' каждый раз, когда я обновляю его: Ваша помощь будет высоко оценена.
# Update status
def editStatus(request, pk):
contact = get_object_or_404(Contact, pk=pk)
# Define the edit post view function
if request.method == 'POST':
# Update the attributes of the post
contact.status = request.POST.get('status')
# Save the changes to the database
contact.save()
# Redirect to the post detail page
return redirect('dashboard:contact_us_detail', pk=contact.pk)
return render(request, 'dashboard/editstatus.html', {
'contact': contact,
})