Django 如何创建;相关的“U名称”;与父模型的关系;透过「;模型(关于相关的\u名称继承)

Django 如何创建;相关的“U名称”;与父模型的关系;透过「;模型(关于相关的\u名称继承),django,django-models,django-orm,Django,Django Models,Django Orm,我有4个型号,包括一个M2M“直通”型号,可实现索引: class TargetShape(models.Model): pass class Page(models.Model): target_shapes = models.ManyToManyField(TargetShape, through='PageElement', related_name='pages') class PageElement(models.Model): target

我有4个型号,包括一个M2M“直通”型号,可实现索引:

class TargetShape(models.Model):
    pass
    
class Page(models.Model):
    target_shapes = models.ManyToManyField(TargetShape, through='PageElement', related_name='pages')
    
class PageElement(models.Model):
    target_shape = models.ForeignKey(TargetShape, related_name='page_elements')
    page = models.ForeignKey(Page, related_name='page_elements')
    index = models.PositiveIntegerField(verbose_name='Order')
    

class WorkingSession(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='working_sessions')
我定义了另一个模型
解析
,它使我能够将所有这些模型链接在一起,以便创建以下
相关的\u名称
关系:

working_session.resolutions
user.resolutions
target_shape.resolutions
page.resolutions
page_element.resolutions
user.resolutions
target_shape.resolutions
page.resolutions
为了让它工作,我必须声明:

class Resolution(models.Model):
    # relations that would be needed from a DRY perspective:
    page_element = models.ForeignKey(PageElement, related_name='resolutions')
    working_session = models.ForeignKey(WorkingSession, related_name='resolutions')
    
    # relations I want to exist to use user.resolutions, target_shape.resolutions, page.resolutions: 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='resolutions')
    target_shape = models.ForeignKey(TargetShape, related_name='resolutions')
    page = models.ForeignKey(Page, related_name='resolutions')
然而,那不是很干燥。从枯燥的角度来看,我应该能够声明
分辨率
仅链接到
页面元素
工作会话
,并推断/继承与父模型的关系:

class Resolution(models.Model):
    page_element = models.ForeignKey(PageElement, related_name='resolutions')
    working_session = models.ForeignKey(WorkingSession, related_name='resolutions')
但在这种情况下,我如何创建以下关系:

working_session.resolutions
user.resolutions
target_shape.resolutions
page.resolutions
page_element.resolutions
user.resolutions
target_shape.resolutions
page.resolutions
不经过:

user.working_sessions.resolutions
target_shape.page_elements.resolutions
page.page_elements.resolutions

我所能想到的就是:

  • 或者像我已经做的那样声明所有字段

  • 或者在User、TargetShape和Page models中声明一个属性,分别返回:

    Resolution.objects.filter(工作会话用户=self) Resolution.objects.filter(页面\元素\目标\形状=自身) Resolution.objects.filter(页面\元素\页面=自身)

那当然行,但那不是很优雅。。。也不是很像Django

有人知道用更像Django的方式来定义这种关系吗