Django не может понять, как использовать внешний ключ
'''
class Project_types(models.Model):
project_type = models.CharField(max_length=200)
def __str__(self):
return self.project_type
class Projects(models.Model):
project_types = models.ForeignKey(Project_types, on_delete=models.CASCADE)
project = models.CharField(max_length=200)
def __str__(self):
return self.project
'''
Когда я пытаюсь выполнить - Project_types(project_type='games').item_set.all() я получаю ошибку, говорящую, что не существует набора элементов атрибутов.
Project_types(project_type='games')
на самом деле не возвращает никакого объекта. Вот почему вы получили ошибку атрибута. Вам нужно добавить фильтр или использовать get. Что-то вроде следующего:
Project_types.objects.get(project_type='games').item_set.all()
Or
Project_types.objects.filter(project_type='games').item_set.all()
class Project_types(models.Model):
project_type = models.CharField(max_length=200)
def __str__(self):
return self.project_type
class Projects(models.Model):
project_types = models.ForeignKey(Project_types, on_delete=models.CASCADE)
project = models.CharField(max_length=200)
def __str__(self):
return self.project
Сначала есть несколько проблем с вашей моделью.
Имена первых моделей не должны быть во множественном числе
Здесь Projects (должен быть Project) имеет один project_type, а Project_types (должен быть ProjectType) имеет один project.
Чтобы запустить нужный вам запрос:
Project_types.filter(project_type='games').item_set.all()
правильным запросом будет:
Project_types.filter(project_type='games').projects_set.all()
использовать проекты вместо элементов,
связанный менеджер основан на имени модели (в этом случае Projects становится projects_set)
смотрите здесь https://docs.djangoproject.com/en/3.2/topics/db/examples/many_to_one/
Атрибут .item_set
не существует на экземпляре, который вы создали, выполнив:
Project_types(project_type='games')
Мне кажется, что вы пытаетесь получить все Projects
типа 'games'
.
Для этого вам придется использовать QuerySet
класса Projects
следующим образом:
Projects.objects.filter(project_types__project_type='games').all()
Дополнительно совет: попробуйте назвать все классы вашей модели, используя сингулярный CamelCase, чтобы их было легче понять. В вашем примере Project_types
должно быть ProjectType
, а Projects
должно быть Project
.