代码之家  ›  专栏  ›  技术社区  ›  KryÅ¡tof Řeháček

相关时预回迁查询设置_name=“+”

  •  0
  • KryÅ¡tof Řeháček  · 技术社区  · 5 年前

    有没有可能没有相关的名字( related_name="+" )要预取目标实例上的对象?当然,我知道相关名称没有问题,但我不确定没有它是否可能。

    下面是示例代码:

    from django.db import models
    
    
    class Parent(models.Model):
        name = models.CharField(max_length=50)
    
    
    class Child(models.Model):
        parent = models.ForeignKey(to=Parent, related_name="+", on_delete=models.CASCADE)
        name = models.CharField(max_length=50)
    
    
    Parent.objects.all().prefetch_related('child_set')
    

    也许可以使用 Prefetch(lookup, queryset=None, to_attr=None) 对象,因为它接受参数列表中的查询集?

    0 回复  |  直到 5 年前
        1
  •  0
  •   Abdul Aziz Barkat    5 年前

    line :

    rel_obj_descriptor = getattr(instance.__class__, through_attr, None)
    

    在这里 instance 是模型实例,并且 through_attr rel_obj_descriptor 将包含 None .

    related_name="+" 因为你想在这里使用向后关系。你说 “这是因为多个应用程序之间的关注点分离” 但这没有多大意义。我们是否为各种其他模型的用户模型设置了外键,并且仍然使用相关名称?是否存在关注点分离(用户模型在单独的应用程序中)?

        2
  •  -2
  •   xxxecute    5 年前

    parent = Parent.objects.get(id=pk)
    parent.child_set.all()
    

    我不知道related_name='+'是否可以防止这种情况,但是如果您从未定义related_name,那么您肯定可以使用这种方法。