django:链接关系对象的 RelatedManager
django: RelatedManager for chained relations objects
所以我有模型:
class Parent(models.Model):
name = models.CharField(max_length=100)
class Child(models.Model):
parent = models.ForeignKey('Parent', on_delete=models.CASCADE)
name = models.CharField(max_length=100)
class Grandchild(models.Model):
parent = models.ForeignKey('Child', on_delete=models.CASCADE)
name = models.CharField(max_length=100)
class ParentPhoto(models.Model):
person = models.ForeignKey('Parent', on_delete=models.CASCADE)
image = models.ImageField()
class ChildPhoto(models.Model):
person = models.ForeignKey('Child', on_delete=models.CASCADE)
image = models.ImageField()
class GrandchildPhoto(models.Model):
person = models.ForeignKey('Grandchild', on_delete=models.CASCADE)
image = models.ImageField()
请忽略糟糕的 database/models 设计(这只是对我复杂的现实应用程序的类比)。
我想为 Parent
添加一个名为 family_photo_set
的 RelatedManager
,这将 return 一个 Queryset
包含他自己的所有 Photos
,他的 Children
和所有 Children'
Grandchildren
。我该如何实现?一个简单的 RelatedManager
让我只能以某种方式过滤 Parents'
parentphoto_set
,而不是真正添加其余的家庭成员。
好的,我找到了解决方法。为其他访客发帖。
class Parent(models.Model):
name = models.CharField(max_length=100)
def get_family_photos(self):
family_photos = []
family_photos.extend(self.parentphoto_set.all())
for child in self.child_set.all():
family_photos.extend(child.childphoto_set.all)
for grandchild in child.grandchild_set.all()):
family_photos.extend(grandchild.grandchildphoto_set.all())
return family_photos
这样我就可以使用它,例如在模板中
{% for photo in parent.get_family_photos %}
(...)
所以我有模型:
class Parent(models.Model):
name = models.CharField(max_length=100)
class Child(models.Model):
parent = models.ForeignKey('Parent', on_delete=models.CASCADE)
name = models.CharField(max_length=100)
class Grandchild(models.Model):
parent = models.ForeignKey('Child', on_delete=models.CASCADE)
name = models.CharField(max_length=100)
class ParentPhoto(models.Model):
person = models.ForeignKey('Parent', on_delete=models.CASCADE)
image = models.ImageField()
class ChildPhoto(models.Model):
person = models.ForeignKey('Child', on_delete=models.CASCADE)
image = models.ImageField()
class GrandchildPhoto(models.Model):
person = models.ForeignKey('Grandchild', on_delete=models.CASCADE)
image = models.ImageField()
请忽略糟糕的 database/models 设计(这只是对我复杂的现实应用程序的类比)。
我想为 Parent
添加一个名为 family_photo_set
的 RelatedManager
,这将 return 一个 Queryset
包含他自己的所有 Photos
,他的 Children
和所有 Children'
Grandchildren
。我该如何实现?一个简单的 RelatedManager
让我只能以某种方式过滤 Parents'
parentphoto_set
,而不是真正添加其余的家庭成员。
好的,我找到了解决方法。为其他访客发帖。
class Parent(models.Model):
name = models.CharField(max_length=100)
def get_family_photos(self):
family_photos = []
family_photos.extend(self.parentphoto_set.all())
for child in self.child_set.all():
family_photos.extend(child.childphoto_set.all)
for grandchild in child.grandchild_set.all()):
family_photos.extend(grandchild.grandchildphoto_set.all())
return family_photos
这样我就可以使用它,例如在模板中
{% for photo in parent.get_family_photos %}
(...)