'会员'对象没有属性' all'

时间:2016-12-14 13:16:49

标签: django django-forms

我的模型定义为:

class MembershipHistory(models.Model):
    mem_name = models.ForeignKey(Member, on_delete=models.CASCADE, related_name='mem_number')
    project_number = models.IntegerField()
    project_name = models.CharField(max_length=200)
    evaluator_remark = models.TextField(null=True, blank=True)

这是我制作ForeignKey

的另一个模型
class Member(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=200)
    membership_number = models.CharField(max_length=10)

我将表单定义为

class MembershipHistoryForm(forms.Form):
    def __init__(self,*args, **kwargs):
        self.user = kwargs.pop('user')
        super(MembershipHistoryForm, self).__init__(*args, **kwargs)
        self.fields['mem_name'].queryset = Member.objects.get(user=self.user)
   #mem_name = forms.ModelChoiceField(empty_label="NAME")

    class Meta:
        model = MembershipHistory
        fields = '__all__'
        widgets = {
            'project_number':forms.TextInput(attrs={'placeholder':'Project Number'}),
            'project_name':forms.TextInput(attrs={'placeholder':'Project Name'}),
            'evaluator_remark':forms.Textarea(attrs={'placeholder':'Evaluator Remark'}),
        }

现在,每当我实例化表单时,我都没有收到以下错误

Django Version: 1.10.4
Exception Type: AttributeError
Exception Value: 'Member' object has no attribute 'all'

关于错误在哪里的任何想法?

2 个答案:

答案 0 :(得分:3)

我认为是因为您没有将查询集分配给mem_name查询集。

使用filter代替get

Member.objects.filter(user=self.user)

虽然在这一点上,我想知道为什么你需要一个查询集,从表单中排除这个字段更有意义,然后在保存实例之前设置用户。

答案 1 :(得分:3)

如果您检查了正确的django文档section,则可以看到

get()

get(**kwargs)

Returns the object matching the given lookup parameters

表示它返回的对象在适当的情况下不是queryset,但form需要queryset,因此使用get方法而不是filter方法。

self.fields['mem_name'].queryset = Member.objects.filter(user=self.user)