0

次のようなモデルがあります。

class Item(models.Model):
    VENDOR_CHOICES = (
        ('a', 'A'),
        ('b', 'B')
    )

    vendor = models.CharField(max_length=16, choices=VENDOR_CHOICES)
    name = models.CharField(max_length=255)
    price = models.DecimalField(max_digits=6, decimal_places=2)

2 つのデータ ソースがあるので、ベンダー A からアイテムを取得し、ベンダー B からアイテムを取得します。

場合によっては、ベンダー A がベンダー B と同じアイテムを持っていないことがあります。たとえば、ベンダー A が 30 個のアイテムを持っていて、ベンダー B が 442 個のアイテムを持っていて、そのうち 6 個のアイテムだけが共通しているとします。共通のアイテムは、まったく同じ名前を持つアイテムとして定義されます。

また、ベンダー a とベンダー b のアイテムに共通するアイテム、つまり、ベンダー a とベンダー b で同じ名前を持つアイテムの価格の違いを見つける必要があります。私は大きなノーを持っています。ベンダーごとに最大 10,000 個のアイテムになる可能性があるので、これを行う効率的な方法が必要ですか?

4

2 に答える 2

0

django 1.11から、これは組み込みの交差メソッドと差分メソッドを使用して解決できます。

vendor_a_items = Item.objects.filter(vendor='a')
vendor_b_items = Item.objects.filter(vendor='b')
common_items = vendor_a_items.intersection(vendor_b_items)
vendor_a_exclussive_items = vendor_a_items.difference(vendor_b_items)
vendor_b_exclussive_items = vendor_b_items.difference(vendor_a_items)

詳細な使用例については、これに関する私のブログ投稿を参照してください。

于 2017-08-09T02:32:27.070 に答える