Python 如何比较两个Django QuerySet并返回QuerySet,同时替换第一个中第二个的相同值?
我的环境是DjangoPython 如何比较两个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
2.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 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应该是一个模型,而不是多个模型的组合。