我有以下模型,它们通过外键和多个关系链接。你知道吗
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
我可以看到,这已经奏效,模型已经创建,关系也如您所期望的那样工作。从控制台输出中可以看到:
>>> from asset_db.models import Batch
>>> Batch.objects.values()
<QuerySet [{'user_id': 1, 'id': 1}, {'user_id': 3, 'id': 2}]>
当我迁移模型时,它创建了以下表(添加了这些表以便您可以看到这些关系)。你知道吗
资产\数据库\批次:
id | user_id
____________
1 | 1
2 | 3
资产\u数据库\u批次\u物料\u id:
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
对象以返回与batch_id
关联的项?基本上,如何在Django中重新创建此SQL查询:
SELECT * FROM asset_db_batch_material_id
INNER JOIN asset_db_batch
ON asset_db_batch_material_id.batch_id = asset_db_batch.id
INNER JOIN asset_db_assetmetadata
ON asset_db_batch_material_id.assetmetadata_id = asset_db_assetmetadata.id
WHERE user_id = 1
与使用ForeignKey类似
相关问题 更多 >
编程相关推荐