Как вставить поле ManyToMany в django

Я хочу вставить поля ManyToMany в мою базу данных, используя django. Я выбираю некоторых клиентов с помощью флажков. Вот мой models.py :

class Campaign(models.Model):
    title = models.CharField(max_length=255)
    channel = models.CharField(max_length=255)
    start_date = models.DateField()
    end_date = models.DateField()
    target_prospect = models.ManyToManyField(ProspectClient,related_name='campaigns_prospect')
    target_partner = models.ManyToManyField(PartnerClient,related_name='campaigns_partners')

Я попробовал код ниже в моем views.py, но он не работает :

def campaigns_page(request):
    if request.user.is_authenticated:
        if request.user.profile == 'D' or request.user.profile == 'E' or request.user.is_superuser:
            campaigns = Campaign.objects.all()
            prospects = ProspectClient.objects.all()
            partners = PartnerClient.objects.exclude(id__in=PartnerClient.objects.values('id')).all()
            context = {
                'campaigns':campaigns,
                'prospects':prospects,
                'partners':partners
            }
            if request.method == 'POST':
                title = request.POST['title']
                channel = request.POST['channel']
                start_date = request.POST['start_date']
                end_date = request.POST['end_date']
                descriptions = request.POST['goals'].split(",")
                targets = request.POST['targets']
                campaign = Campaign.objects.create(title=title,channel=channel,start_date=start_date,end_date=end_date)
                for description in descriptions:
                    goal = Goal.objects.create(description=description)
                    goal.campaign.add(campaign)
                for target in targets:
                    prospects.campaign.add(campaign)
                    partners.campaign.add(campaign)
            return render(request,'CampaignManagement/campaigns_page.html',context)
    return render(request, 'Login/logout.html')

Как я могу решить эту проблему?

Я вижу несколько ошибок. Возможно, одна или несколько из них приводят к проблеме.

Один
. Попробуйте напечатать это:

partners = PartnerClient.objects.exclude(id__in=PartnerClient.objects.values('id')).all()
print(partners)

Я подозреваю, что он выведет None, поскольку вы исключаете все id в PartnerClient.objects.values('id'). С другой стороны, вам не нужно all(), поскольку exclude() вернет все результаты, которые вы ищете.

Два
. В строке for target in targets: что именно вы итерируете? targets = request.POST['targets'] просто дает вам строку, поэтому она будет итерировать каждую букву. Возможно, вы имели в виду:

targets = request.POST['targets'].split(", ")

, как вы сделали для descriptions? Или, возможно, вы получаете список элементов из вашей формы, в этом случае вы можете использовать:

targets = request.POST.getlist('targets')
Вернуться на верх