Yashodhan
Yashodhan

Reputation: 135

'Member' object has no attribute 'all'

My models are defined as:

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)

And this is my other model from which I make the 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)

I defined my form as

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'}),
        }

Now, whenever I instantiate the form, I am not getting the following error

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

any ideas as to where is the error?

Upvotes: 3

Views: 7044

Answers (2)

Renjith Thankachan
Renjith Thankachan

Reputation: 4346

If you check proper django docs section, you can see that

get()

get(**kwargs)

Returns the object matching the given lookup parameters

which means it returns an object in proper case not queryset, but form needs queryset so instead of using get method use filter.

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

Upvotes: 10

Sayse
Sayse

Reputation: 43330

I assume its because you're not assigning a queryset to the mem_name queryset.

Use filter instead of get

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

Although at this point, I wonder why you need a queryset at all, it would make more sense to exclude this field from the form, then set the user before saving the instance.

Upvotes: 4

Related Questions