Django:在一个字段值上连接多个模型,以便在Django temp中使用

2024-10-02 06:28:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Django 2.0工作。我有多个模型共享一个共同的领域,并试图找到相关的对象。示意性地,给定Model1和Model2,对于QuerySet中的每个Model1,我们希望找到相应的Model2对象,以便

Model1.property == Model2.property. 

在此应用程序中,最多有一个(但可能没有)Model2满足此条件。此查询集将在Django模板中用于显示结果。你知道吗

现在,关于如何解决这个问题,我有几个想法,但我想知道是否有一个标准的解决方案。你知道吗

考虑:我知道Django模板语言没有内置的方法来查找具有特定属性值的对象

想法:

1)For循环输入模板。遍历Model2s,评估Model2.property并测试Model2.property==Model1.property。如果为True,则存储Model2。看起来很笨拙,而且违背了Django模板语言的哲学。你知道吗

2)用python处理。可能会将新属性附加到Model1

Model1.property.model2 = Model2.objects.filter(property=property)

或者使用带有“get”的try/expect块

3)在查询中进行处理。或许可以用相关的model2注释检索Model1的queryset的结果

4)是否可以使用自定义模板标记将此功能添加到Django模板中?你知道吗

以下是我的模型,供参考:

class ModuleSubscription(models.Model):
subscriber = models.ForeignKey(User, on_delete=models.CASCADE)  # owner of module
module = models.ForeignKey(Module, on_delete=models.CASCADE)  # id of owned module


class ModuleAssignment(models.Model):
delegation = models.ForeignKey(Delegation, on_delete=models.CASCADE)
module = models.ForeignKey(Module, on_delete=models.CASCADE)  # assigned module
access_granted = models.BooleanField(default=False)
module_log = models.ForeignKey(ModuleLog, default=None, on_delete=models.SET_DEFAULT, null=True)

现在,我需要filter ModuleSubscription by subscriber和ModuleAssignment by delegation,然后找到结果ModuleSubscription.module模块== ModuleAssignment.module模块. 原因是,对于每个ModuleSubscription,我需要相应ModuleAssignment(如果存在)的access\u grated属性。然后,在模板中,我需要循环遍历所有已过滤的ModuleSubscriptions并显示关联的ModuleAssignment.access\u已授予你知道吗


Tags: 对象django模板属性onmodelspropertydelete
1条回答
网友
1楼 · 发布于 2024-10-02 06:28:01

(除了我的评论之外)我在谈论一张桌子,那里所有的补助金都会暴露出来。可能我误解了delegation在这里的意思。你知道吗

# filtering part
modules = ModuleSubscription.objects.filter(subscriber=_s)
grants = ModuleAssignment.objects.filter(delegation=_d, module__in=modules)

# template part
for g in grants:
  ...

是这样吗?你知道吗

相关问题 更多 >

    热门问题