当我试图保存一些表单数据时,我得到'玩家'对象不可迭代,我不明白为什么。
以下是我的RequestedPartners模型:
class RequestedPartners(models.Model):
first_nm = models.CharField('Requested Partner First Name', max_length=100)
last_nm = models.CharField('Requested Partner Last Name', max_length=100)
player = models.ManyToManyField(Players)
这是我的表格:
class RequestedPartnersForm(forms.ModelForm):
class Meta:
model = RequestedPartners
fields = ['first_nm', 'last_nm']
def clean_first_nm(self):
return self.cleaned_data['first_nm'].upper()
def clean_last_nm(self):
return self.cleaned_data['last_nm'].upper()
以下是玩家模型:
class Players(models.Model):
first_nm = models.CharField('First Name', max_length=100)
last_nm = models.CharField('Last Name', max_length=100)
email = models.EmailField('Email Address (optional)', max_length=200, null=True)
这是我的视图方法,我得到“'玩家'对象不可迭代”错误。
def post(self, request):
bound_form = UsersForm(request.POST)
lineItemsForm = LineItemsForm(request.POST)
RequestedPartnersFormSet = formset_factory(RequestedPartnersForm)
formset = RequestedPartnersFormSet(request.POST, request.FILES)
if bound_form.is_valid() and lineItemsForm.is_valid() and formset.is_valid():
bound_form.save()
players = Players()
players.first_nm = bound_form.cleaned_data['first_nm']
players.last_nm = bound_form.cleaned_data['last_nm']
players.email = bound_form.cleaned_data['email']
players.save()
for form in formset.cleaned_data:
rp1 = RequestedPartners()
rp1.last_nm = form['last_nm']
rp1.first_nm = form['first_nm']
rp1.player = players # Error is being thrown on this line
rp1.save()
return redirect(reverse('begin_registration'))
导致此错误的错误是什么?
答案 0 :(得分:1)
RequestedPartners.player
是ManyToManyField。根据{{3}},当您需要为它们指定值时,它们会有一个特殊的API。
首先,你需要保存RequestedPartners
对象(以便它有一个主键),然后添加玩家:
rp1 = RequestedPartners()
rp1.last_nm = form['last_nm']
rp1.first_nm = form['first_nm']
rp1.save()
rp1.player.add(players)
rp1.save()
答案 1 :(得分:0)
属性播放器是ManyToMany声明。您无法分配这样的值,请尝试使用
rp1.player.add(players)