2016-12-14 6 views
0

私のモデルのように定義されています。私のように私のフォームを定義し「メンバー」オブジェクトが「すべての」は属性を持っていない

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' 

どこが違うのですか?

答えて

1

あなたが適切なDjangoのドキュメントsectionをチェックすると、あなたは

get() 

get(**kwargs) 

Returns the object matching the given lookup parameters 

すると、それはクエリセットではない、適切な場合には、オブジェクトを返しますが、formニーズはそれほど代わりget方法の使用filterを使用してのクエリセットを意味していることがわかります。

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

ありがとうございます。本当に助けられた – Yashodhan

2

クエリーセットをmem_nameクエリーセットに割り当てていないため、私はそれを仮定します。

代わりget

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

の使用filterこの時点で、あなたはまったくクエリセットを必要とする理由のだろうか、それはその後、保存する前にユーザーを設定し、フォームからこのフィールドを除外するために、より多くの意味になるだろうが、インスタンス。

+1

はい、+1 – e4c5

関連する問題