我需要分配多个Campaign类型到一个Campaign使用Django formmodels。一次选择许多CapaignTypes,只将CapaignTypes添加到一个活动中。谢谢,我将感谢任何帮助
class Campaign(models.Model):
client_id = models.ForeignKey(Company)
name = models.CharField(max_length=45, null=True)
campaign_status = models.ForeignKey(CampaignStatus)
def __str__(self):
return self.name
class Campaign_type(models.Model):
campaign_type = models.CharField(max_length=45)
client_id = models.ForeignKey(Company)
campaign_id = models.ManyToManyField(Campaign, verbose_name='Campaign(s)')
def __str__(self):
return self.campaign_type + ' ' + str(self.client_id)
我的代码form.py
class CampaignCampaignTypeForm(forms.ModelForm):
class Meta:
model = CampaignType
exclude = ['campaign_id', 'client_id']
campaign_type = forms.ModelMultipleChoiceField(queryset=CampaignType.objects.all())
def __init__(self, *args, **kwargs):
company = kwargs.pop("company")
if kwargs.get('instance'):
initial = kwargs.setdefault('initial', {})
initial['campaign_type'] = [t.pk for t in kwargs['instance'].campaing_type_set.all()]
forms.ModelForm.__init__(self, *args, **kwargs)
我的代码view.py
def add_campaign_type_to_campaign(request, campaign_id):
if not request.user.is_authenticated():
return render(request, 'campaign/login.html')
else:
client_user = ClientUser.objects.get(client=request.user.pk)
form = CampaignCampaignTypeForm(data=request.POST or None, company=client_user.company)
if form.is_valid():
campaigntype = form.save(commit=False).clean()
#client_user = ClientUser.objects.get(client=request.user.pk)
campaign = Campaign.objects.get(id=campaign_id)
campaigntype.campaign_id = campaign
campaigntype.save()
form.save_m2m()
# return render(request, 'campaign/detail_campaign.html', {'campaign_type': campaign_type})
context = {
"form": form,
}
您尝试过表单吗?SelectMultiple部件?或者如果你可以在前端使用Bootstrap, Select2是一个很好的JS包,可以帮助你进行多次选择。