0

変な質問ですので、よろしくお願いします。Django Rest に次のようなモデルがあります。

class BaseModel(models.Model):
    created_date = models.DateTimeField(auto_now_add=True)
    modified_date = models.DateTimeField(auto_now=True)

   class Meta:
        abstract = True

class Foo(BaseModel):
    barId = models.ForeignKey(Bar, unique=False)
    fizzId = models.ForeignKey(Fizz, unique=False)
    buzzId = models.IntegerField(unique=False)
    value = models.TextField()

そして、指定された {request_barId, request_buzzId, lastUpdateDate} を持つすべての Foo のリストを返す必要がある ViewSet があります。これはかなり単純明快で、

foobar = Foo.objects.filter(
buzzId=request_buzzId,
modified_date__gt=request_lastUpdateDate,
barId=request_barId)

これがこすりです。指定された budId がオーバーレイする必要がある基本リストである、buzzId のデフォルト値があり、基本リストのインスタンスを置き換えます。ちょっと迷ってるところです。私には解決策がありますが、特にエレガントではなく、このクリーナーを実行する方法があるように感じます。オーバーレイを行うための私のコードは次のとおりです。

base_foobar = Foo.objects.filter(
buzzId=base_buzzId,
modified_date__gt=request_lastUpdateDate,
barId=request_barId).exclude(
        fizzId__in=[o.fizzId for o in foobar])
result = foobar | base_foobar

そして、これは本当にぎくしゃくしているようです。これをきれいにする方法はありますか?

編集: 明確にするために、タプル { 1, 0, '01-01-1970' } のリストが基本セット (buzzId: 0) を表し、fizzIds { 1, 2, 3 を含むオブジェクトのリストを返すとしましょう、10}。タプル { 1, 1, '01-01-1970' } が、文字列の完全なセットに対する、buzzId のリクエストを表しているとしましょう。1 の bugId (augment と呼びます) に一致する Foos と fizzIds { 2, 10, 15, 20 } があるとすれば、結果セットは次のようになります。

{ (base) 1, (augment) 2, (base) 3, (augment) 10, (augment) 15, (augment) 20 }

これですっきりしますか?

4

1 に答える 1