Есть модель с полем
ManyToMany
. Из
POST
запроса получаю список pk записей которые к
ManyToMany
привязываются. Именно
pk
объекта, который к
ManyToMany
привязан. Мне нужно получить только те записи которые нашлись в этой модели.
Так их ищу:
json_request = json.loads(request.body)
exists_list = json_request['addId']
exists_list.append(json_request['mainId'])
print(exists_list)
try:
exists_result = LinkedData.objects.filter(many__in=exists_list)
print(exists_result) >>> 5, 823, 186, 585
return HttpResponse(exists_result)
except LinkedData.DoesNotExist:
return HttpResponse('ok')
В записи
ManyToMany
такие
pk
:
5, 823, 186, 585
В
exists_list
:
[83, 663, 853, 5]
exists_result
содержит следующие записи:
5, 823, 186, 585
То-есть он берет не только те объекты, которые есть в
exists_list
(тело
POST
запроса). Пока придумал перебирать
QuerySet
и искать совпадения с
exists_list
, и то чего нет в
exists_list
удалять из
QuerySet
. Может есть мение костыльный способ сделать все как нужно?
Модели:
class LinkedData(models.Model):
many = models.ManyToManyField(
ObjectDataFull,
related_name='many_related',
verbose_name='Много'
)
class Meta:
db_table = 'build_analyzer_linked_data'
def __str__(self):
return u', '.join([str(a.pk) for a in self.many.all()])
class LinkedInfo(models.Model):
linked_data = models.ForeignKey(
LinkedData,
on_delete=models.CASCADE,
related_name='linked_data_related'
)
full = models.ForeignKey(
ObjectDataFull,
on_delete=models.CASCADE,
related_name='unsorted_related'
)
main = models.BooleanField(
default=False,
null=False,
)
class Meta:
db_table = 'build_analyzer_linked_info'
И можно ли как-то это в одну строку объединить:
exists_list = json_request['addId']
exists_list.append(json_request['mainId'])
? Когда так делаю:
exists_list = json_request['addId'].append(json_request['mainId'])
получаю
exists_list is None >>> True
JSON выглядит так:
{
"mainId": 5,
"addId": [83, 663, 853]
}