Как получить значение поля manytomany в виде списка в Django queryset

class Subject(models.Model):
    name = models.CharField(max_length=100, blank=True, null=False)
    category = models.CharField(choices=TYPE_CHOICES, null=True, max_length=50)
    setting = models.ManyToManyField(Contact)

class Contact(models.Model):
    name = models.CharField(max_length=50, blank=True, null=True)
    email = models.EmailField(max_length=50, blank=True)
id subject_id contact_id
1 66 13
2 66 28
3 71 13
4 71 28
5 98 13
6 98 28
7 98 37
8 20 13
Subject.objects.values('id', 'setting')

-> [{'id': 66, 'setting': [13, 28]}, {'id': 71, 'setting': [13, 28]}, {'id': 98, 'setting': [13, 28, 37]}, {'id': 20, 'setting': [13]}]

Мне интересно, как получить значение поля manytomany в виде списка в Django queryset. Приведенный выше queryset является результатом, который я хочу получить, но я получаю результат, как показано ниже. Как я могу получить значение поля manytomany в виде списка?

Subject.objects.values('id', 'setting')

-> [{'id': 66, 'setting': [13]}, {'id': 66, 'setting': [28]}, {'id': 71, 'setting': [13]}, {'id': 71, 'setting': [28]}, {'id': 98, 'setting': [13]}, {'id': 98, 'setting': [28]}, {'id': 98, 'setting': [37]}, {'id': 20, 'setting': [13]}]
subject1 = Subject.objects.create(subject_id=66)
contact1 = Contact.objects.create(contact_id=13)
contact2 = Contact.objects.create(contact_id=28)

subject1.setting.add(bbq_sauce)
subject1.setting.add(mayo_sauce)

print(subject1.setting.all())

Этот код возвращает queryset с каждым contact_id для одного subject_id. Я полагаю, что путем итерации по каждому субъекту можно получить все контактные_иды

Веб-сайт, на котором я нашел эту информацию: https://www.sankalpjonna.com/learn-django/the-right-way-to-use-a-manytomanyfield-in-django

Вернуться на верх