Python 如何比较两个Django QuerySet并返回QuerySet,同时替换第一个中第二个的相同值?

Python 如何比较两个Django QuerySet并返回QuerySet,同时替换第一个中第二个的相同值?,python,django,django-queryset,Python,Django,Django Queryset,我的环境是Django2.0.2和Python3.6.1 如何比较两个Django QuerySet并返回QuerySet,同时替换第一个中第二个的相同值 例如,我有查询集: >>> qs_local = PriceLocal.objects.filter(user_id=request.user.id) >>> print(qs_local) [{ 'user_id': 1, 'product_id': 1, 'price': 100 }] # one re

我的环境是Django
2.0.2
和Python
3.6.1

如何比较两个Django QuerySet并返回QuerySet,同时替换第一个中第二个的相同值

例如,我有查询集:

>>> qs_local = PriceLocal.objects.filter(user_id=request.user.id)
>>> print(qs_local)
[{ 'user_id': 1, 'product_id': 1, 'price': 100 }] # one record

>>> qs_world = PriceWorld.objects.all()
>>> print(qs_world)
[{ 'product_id': 1, 'price': 300 }, { 'product_id': 2, 'price': 500 }, ... ] # many records
我想比较这个Django QuerySet并返回QuerySet,如下所示:

[{ 'product_id': 1, 'price': 100 }, { 'product_id': 2, 'price': 500 }, ...]
此时,我们正在从第二个查询集到第一个查询集替换相同的记录(使用
'product\u id:1

编辑:

我的模型:

class PriceWorld(models.Model):

    product_id = models.PositiveSmallIntegerField()
    price = models.PositiveSmallIntegerField()

class PriceLocal(models.Model):

    user_id = models.ForeignKey(User, on_delete=models.CASCADE)
    product_id = models.ForeignKey(PriceWorld, on_delete=models.CASCADE)
    price = models.PositiveSmallIntegerField()

不完全清楚您在问什么,但您似乎希望PriceWorld中的元素与PriceLocal中与特定用户ID相关的元素的产品ID相匹配。因此:

PriceWorld.objects.filter(product_id__in=PriceLocal.objects.filter(user_id=request.user.id))
将作为子查询执行

注意,如果您没有更改相关的\u名称,您的原始查询可以写成
request.user.pricelocal\u set.all()
,因此您可以执行以下操作:

PriceWorld.objects.filter(product_id__in=request.user.pricelocal_set.all())

这与查询/子查询完全相同,但可读性更高。

不知道查询集:

但所需输出可通过以下方式实现:

for qs in qs_world:
    if qs['product_id']==qs_local[0]['product_id']:
        qs['price']=qs_local[0]['price']
    else:
        print "hii" 
print qs_world

发布模型定义?这是不可能的,因为QuerySet应该是一个模型,而不是多个模型的组合。