Django Model не распознает поля модели при использовании Serialiser Class Generic Views

Я пытаюсь получить список шаблонов из модели Django, но всегда получаю ошибку. Ниже приведена ошибка, когда я пытаюсь получить список шаблонов заданий. Я получаю эту ошибку, потому что она не распознает поле template_name.

AttributeError: Получена ошибка AttributeError при попытке получить значение для поля template_name на сериализаторе ListJobTemplateSerializer. | Поле сериализатора может быть названо неверно и не совпадать с атрибутом или ключом экземпляра Job. | Оригинальный текст исключения был: 'Job' object has no attribute 'template_name'.

Модель работы:

class Job (Dates, ID):
    name = models.CharField(max_length=255, validators=[name_validation])
    is_remote = models.BooleanField(default=False)
    company = models.ForeignKey(to="companies.company", related_name="%(class)s", on_delete=models.CASCADE)

Шаблон модели:

class JobTemplate(Dates, ID):
    template_name = models.CharField(max_length=255)
    jobs = models.ForeignKey(to="jobs.Job", related_name="%(class)s", on_delete=models.CASCADE)
    objects = BulkUpdateOrCreateQuerySet.as_manager()

  class Meta:
      db_table = 'job_template'

  def __str__(self):
      return name


 class ListJobTemplateSerializer(serializers.ModelSerializer):
   """List all templates of a job."""
   job_title = serializers.CharField(source="name")

   class Meta:
     model = JobTemplate
     fields = ["id", "job_title", "template_name"]

Проблема с вашим кодом заключается в том, что вы, должно быть, делаете некоторые ошибки в ваших представлениях. Нет никаких проблем с вашей моделью и с вашим сериализатором, все в порядке. Поскольку предоставлено недостаточно информации, возможная проблема заключается в наборе запросов, поскольку ваш набор запросов получает объект Job, а не объект JobTemplate, вам нужно переделать ваш набор запросов для получения JobTemplate.

Справочный документ, который может помочь вам с queryset: https://docs.djangoproject.com/en/3.2/ref/models/querysets/

Вернуться на верх