Как обновить значение из представлений? и как разобрать Id для get_success_url для DetailView? В Django

Как обновить значение из представления? И разобрать Id в DetailView ?

  1. Problem Update Value Я пытаюсь написать query.attendance и query.status, чтобы получить данные из базы данных. но ошибка говорит "'QuerySet' object has no attribute 'attendance' / 'status'"

  2. 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)
Вернуться на верх