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()
Вернуться на верх