2

次のようなジョブとブロブ モデルがあります。

class Job(models.Model):
    id = models.UUIDField(default=uuid.uuid4, primary_key=True)
    start_time = models.DateTimeField()
    input = models.ForeignKey('Blob')


class DeferContentManager(models.Manager):
    use_for_related_fields = True

    def get_queryset(self, *args, **kwargs):
        return super(DeferContentManager, self).get_queryset(*args, **kwargs).defer('content')

class Blob(models.Model):
    content = models.BinaryField()
    name = models.CharField(max_length=10000, default='')


    objects = DeferContentManager()

残念ながら、これを行う Django ORM クエリがあります。

Job.objects.filter(....).select_related()

これにより、ジョブの BinaryFields が読み込まれ、MemoryError が発生します。

content上記のような select_related() クエリを実行した場合、BinaryField を除外する方法はありますか?

PS: クエリを変更して使用できることはわかっていますselect_related('non_binary_field')が、ここでは一般的な解決策が必要です。この行を呼び出すコードにアクセスできません:Job.objects.filter(....).select_related()

4

1 に答える 1