Как получить значение поля 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