Django - 如何过滤ManyToMany模型对象?

时间:2017-06-06 11:33:50

标签: python django postgresql

我有以下模型,这些模型通过外键和ManyToMany关系链接。

RewriteEngine on
RewriteRule ^property-(.*).php$ ./d.php?ID=$i

我可以看到这已经奏效,模型已经创建,关系可以正常运作。正如您从控制台输出中看到的那样:

from django.db import models
from django.contrib.auth.models import User


class AssetMetadata(models.Model):

    id = models.DecimalField(6).auto_creation_counter
    material_id = models.CharField(max_length=256, blank=True)
    series_title = models.CharField(max_length=256, blank=True)
    season_title = models.CharField(max_length=256, blank=True)
    season_number = models.IntegerField(default=0)
    episode_title = models.CharField(max_length=256, blank=True)
    episode_number = models.IntegerField(default=0)
    synopsis = models.TextField(max_length=1024, blank=True)
    ratings = models.CharField(max_length=256, blank=True)

    def __str__(self):
        return self.material_id

class Batch(models.Model):
    material_id = models.ManyToManyField(AssetMetadata)
    user = models.ForeignKey(User, unique=True)

    def __str__(self):
        return 'Batch_' + str(self.pk) + '_' + self.user.username

当我迁移模型时,它创建了以下表格(添加以便您可以看到关系)。

asset_db_batch:

>>> from asset_db.models import Batch
>>> Batch.objects.values()
<QuerySet [{'user_id': 1, 'id': 1}, {'user_id': 3, 'id': 2}]>

asset_db_batch_material_id:

id | user_id
____________
1  |    1
2  |    3

我的问题是如何过滤id | batch_id | assetmetadata_id ______|_____________|________________ 1 | 1 | 1 2 | 1 | 2 3 | 1 | 6 4 | 1 | 8 5 | 1 | 4 6 | 2 | 8 7 | 2 | 2 8 | 2 | 4 9 | 2 | 7 对象以返回与Batch相关联的项目?基本上我如何在Django中重新创建这个SQL查询:

batch_id

1 个答案:

答案 0 :(得分:1)

与使用ForeignKey的方式类似

AssetMetadata.objects.filter(batch__user__id=1)
相关问题