Django как найти, если на объект ссылается ForeignKey из другого класса в model.py
У меня есть два класса, показанных ниже, я хотел добавить функцию к File, чтобы проверить, ссылается ли файл на какие-либо данные внутри класса Project (аналогично тому, как здесь делается "was published recently": https://docs.djangoproject.com/en/4.0/_images/admin12t.png ).
class File(models.Model):
def __str__(self):
return self.name
file = models.FileField(upload_to='uploads/')
class Project(models.Model):
def __str__(self):
return self.name
files = models.ManyToManyField(File)
class File(models.Model):
file = models.FileField(upload_to='uploads/')
def __str__(self):
return self.name
def is_used_in_a_project(self):
return self.project_set.exists()
Django автоматически раскрывает атрибут <model>_set
на другой стороне отношения ManyToManyField. Это queryset, содержащий все экземпляры, которые связаны с ним через отношение m2m на другой модели.
Смотрите https://docs.djangoproject.com/en/4.0/topics/db/examples/many_to_many/
Вы можете изменить имя этого атрибута "обратного отношения", установив related_name
поле ManyToManyField.
https://docs.djangoproject.com/en/4.0/ref/models/fields/#manytomany-arguments
Например, вы можете определить:
class Project(models.Model):
files = models.ManyToManyField(File, related_name="linked_projects")
class File(models.Model):
def is_used_in_a_project(self):
return self.linked_projects.exists()