Reputation: 135
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
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
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