Django:在尝试实例化对象时,Object不可迭代

时间:2016-01-12 05:44:07

标签: python django

当我试图保存一些表单数据时,我得到'玩家'对象不可迭代,我不明白为什么。

以下是我的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'))

导致此错误的错误是什么?

2 个答案:

答案 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)
相关问题