Django 中的多对多关系

Many-to-Many relationship in Django

我有以下3个型号:

class Platform(models.Model):
    title = models.CharField(max_length=100, unique=True)

class Profile(models.Model):
    title = models.CharField(max_length=110, unique=True)
    platform = models.ManyToManyField(Platform)

class Register(models.Model):
    ...
    profile = models.ManyToManyField(Profile)
    ...

我的views.py

def info(request):
    ...
    registers=Register.objects.all()
    ...
    for register in registers:
        profile= register.profile....???

我需要通过 Register 模型的查询了解一个或多个配置文件

可以吗?

您可以获得所有与一个或多个registers相关的Profiles:

Profile.objects.filter(<b>register__in=registers</b>)

或者您可以获得 Register 对象的 Profile

def info(request):
    # …
    registers=Register.objects.all()
    # …
    for register in registers:
        profiles = register<b>.profile.all()</b>

但在这里您将访问数据库 per register,这可能无法很好地扩展。

您可以像 , use .prefetch_related(…) [Django-doc] 一样,通过一个额外的查询在内存中获取所有这些相关的 Profile,然后在 Django/Python 级别执行 JOIN:

def info(request):
    # …
    registers=Register.objects.<b>prefetch_related('profile')</b>
    # …
    for register in registers:
        profiles = register<b>.profile.all()</b>