Как обновить значение из представлений? и как разобрать Id для get_success_url для DetailView? В Django
Как обновить значение из представления? И разобрать Id в DetailView ?
Problem Update Value Я пытаюсь написать query.attendance и query.status, чтобы получить данные из базы данных. но ошибка говорит "'QuerySet' object has no attribute 'attendance' / 'status'"
Problem Parse Id Я не знаю, как разобрать этот идентификатор для get_success_url
.
1. home/views.py
class HomeView(FormView):
template_name = 'home/index.html'
form_class = TicketForm
def form_valid(self, form):
getId = form.cleaned_data['nomor_ticket']
query = Graduates.objects.filter(ticket_id=getId)
if query:
**#FIRST ERROR (attendance and status has no attribute)**
print(query.attendance == timezone.now())
print(query.status == True)
**#FIRST END ERROR**
print('ticket available')
else:
print('no ticket not found ')
print(query)
return super().form_valid(form)
def get_success_url(self):
return reverse('attendance:index' + how to get id ?)
2. attendance/models.py
class StudyProgram(models.Model):
study_program_id = models.IntegerField()
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Graduates(models.Model):
ticket_id = models.CharField(primary_key=True, max_length=16, unique=True,
default=custom_id)
graduate_number = models.IntegerField()
student_id = models.IntegerField()
full_name = models.CharField(max_length=100)
study_program = models.ForeignKey(StudyProgram, on_delete=models.CASCADE)
attendance = models.DateTimeField(blank=True, null=True, editable=False)
status = models.BooleanField(default=False)
3. attendance/views.py
class Attendance(DetailView):
model = Graduates
template_name = "attendance/index.html"
4. attendance/urls.py
from django.urls import path
from . import views
app_name = 'attendance'
urlpatterns = [
path('<pk>/', views.Attendance.as_view(), name='index'),
]
1 Ваш объект query
имеет тип QuerySet
, а не Graduate
. Вы должны сделать что-то вроде
try:
graduate = Graduate.objects.get(ticket_id=getId)
except Graduate.DoesNotExist:
print('no ticket not found ')
2 Просто забудьте о get_success_url
. Выполните перенаправление в методе form_valid
. Последняя строка в form_valid
:
return super().form_valid(form)
это не что иное, как выполнение перенаправления.
Таким образом, ваш home/views.py
будет выглядеть так:
class HomeView(FormView):
template_name = 'home/index.html'
form_class = TicketForm
def form_valid(self, form):
getId = form.cleaned_data['nomor_ticket']
try:
graduate = Graduate.objects.get(ticket_id=getId)
print(graduate.attendance == timezone.now())
print(graduate.status == True)
print('ticket available')
except Graduate.DoesNotExist:
print('no ticket not found ')
print(graduate)
return redirect('attendance:index', graduate.ticket_id)