TypeError: Поле 'id' ожидало число, но получило <django.db.models.query_utils.DeferredAttribute object

Попытка отобразить стажера(ов) только для конкретного NewHireTraining.

Я передаю дополнительные контекстные данные в класс представления training_details, чтобы показать обучающихся в рамках этого обучения, которые связаны с foreingkey в классе Trainee.

Возвращается расположение атрибута id вместо значения id.

Буду очень признателен за помощь

models.py

class NewHireTraining(models.Model):
    location = models.ForeignKey(Location, on_delete=models.CASCADE)
    program = models.ForeignKey(Program, on_delete=models.CASCADE)
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    trainer = models.ForeignKey(Trainer, on_delete=models.RESTRICT)
    start_date = models.DateField()
    nesting_date = models.DateField()
    production_date = models.DateField()
    requested_headcount = models.IntegerField()
    starting_headcount = models.IntegerField(null=True, blank=True)
    ending_headcount = models.IntegerField(null=True, blank=True)
    end_nesting_headcount = models.IntegerField(null=True, blank=True)

    def __str__(self):
        return str(self.program) + ' ' + str(self.project) + ' ' + str(self.start_date)


class Trainee(models.Model):
    first_name = models.CharField(max_length=55)
    last_name = models.CharField(max_length=55)
    employee_number = models.IntegerField()
    hire_date = models.DateField()
    is_term = models.BooleanField(default=False)
    new_hire_training = models.ForeignKey(NewHireTraining, on_delete=models.CASCADE, default="")

    def __str__(self):
        return self.first_name + ' ' + self.last_name

views.py

class TrainingDetailsView(DetailView):
    model = NewHireTraining
    template_name = 'nht/training_details.html'
    context_object_name = 'training'
    

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['trainees'] = Trainee.objects.filter(new_hire_training = self.model.id)
        return context

Внутренняя ошибка сервера: /training_details/4 Traceback (последний последний вызов): File "C:\Users\User\Desktop\webprojects\calendar\venv\lib\site-packages\django\db\models\fields_init_.py", line 1823, in get_prep_value return int(value) TypeError: аргумент int() должен быть строкой, байтоподобным объектом или числом, а не 'DeferredAttribute'

.

Traceback Вышеуказанное исключение было непосредственной причиной следующего исключения:

Вы ссылаетесь на объект с помощью self.object, а не self.model:

class TrainingDetailsView(DetailView):
    model = NewHireTraining
    template_name = 'nht/training_details.html'
    context_object_name = 'training'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['trainees'] = Trainee.objects.filter(new_hire_training=self.object)
        return context

Вы также можете получить доступ к отношению в обратном направлении, с помощью:

class TrainingDetailsView(DetailView):
    model = NewHireTraining
    template_name = 'nht/training_details.html'
    context_object_name = 'training'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['trainees'] = self.object.trainee_set.all()
        return context
Вернуться на верх