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