Django 如何查找对象是否被 model.py 中的另一个 class 引用的外键
Django how to find if the object is referenced by ForeignKey from another class in model.py
我有两个 class 如下所示,我想向文件添加一个函数来检查该文件是否被项目中的任何数据引用 class(类似于“最近发布的方式” " 在这里完成: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 自动在 ManyToManyField 关系的另一端公开一个 <model>_set
属性。这是一个查询集,包含通过另一个模型上的 m2m 关系链接到它的所有实例。
见https://docs.djangoproject.com/en/4.0/topics/db/examples/many_to_many/
您可以通过设置 ManyToManyField 的 related_name
来更改此“反向关系”属性的名称。
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()
我有两个 class 如下所示,我想向文件添加一个函数来检查该文件是否被项目中的任何数据引用 class(类似于“最近发布的方式” " 在这里完成: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 自动在 ManyToManyField 关系的另一端公开一个 <model>_set
属性。这是一个查询集,包含通过另一个模型上的 m2m 关系链接到它的所有实例。
见https://docs.djangoproject.com/en/4.0/topics/db/examples/many_to_many/
您可以通过设置 ManyToManyField 的 related_name
来更改此“反向关系”属性的名称。
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()