前提
Django、Python初心者です。
初めて質問をさせていただきます。至らない点があるかもしれませんが、よろしくお願いいたします。
Django2.0(Python3.6)でTwitterのようなSNSを作っています。
今のところ、ユーザー登録、ログイン、ログアウト、フォロー、メッセージの送受信の機能を作成しました。
実現したいこと
メッセージを送信する時に送信相手のユーザーを、セレクトボックスで選びます。
現在は、全てのユーザーが選択肢として表示されます。
これを「フォローしているユーザーだけ」表示させたいです。
views.py
Python
1class MessageCreate(LoginRequiredMixin, generic.CreateView): 2 login_url = 'accounts/login' 3 template_name = 'mymessages/message_create.html' 4 form_class = MessageCreateForm 5 6 # 送信者の欄は自動で入れる 7 def form_valid(self, form): 8 form.instance.from_user = self.request.user 9 form.save() 10 return redirect('mymessages:message_index') 11
forms.py
Python
1class MessageCreateForm(forms.ModelForm): 2 class Meta: 3 model = Message 4 fields = ('to_user', 'subject', 'text', 'image')
試したこと
自分で調べたところ、forms.pyを以下のようにすれば良さそうなのですが、
エラーがでます。
Python
1class MessageCreateForm(forms.ModelForm): 2 class Meta: 3 model = Message 4 fields = ('subject', 'text', 'image') 5 6 to_user = forms.ChoiceField( 7 queryset=User.objects.get(user_id=self.request.user.user_id), 8 ) 9
エラー
NameError: name 'self' is not defined
self.request.userのところを、現在ログインしているユーザー(今のページを開いているユーザ)にすればできそう...だと思うのですが、どのように書けば良いでしょうか?
それとも、他に良い方法があるでしょうか?
###メッセージのmodels.py
Python
1... 2class Message(models.Model): 3 4 from_user = models.ForeignKey( 5 settings.AUTH_USER_MODEL, 6 on_delete=models.SET_NULL, 7 null=True, 8 related_name='from_user' 9 ) 10 11 to_user = models.ForeignKey( 12 settings.AUTH_USER_MODEL, 13 on_delete=models.SET_NULL, 14 null=True, 15 related_name='to_user' 16 ) 17 18 subject = models.CharField( 19 '件名', 20 max_length=50, 21 help_text='最大50文字' 22 ) 23 24 text = models.TextField( 25 '本文', 26 max_length=400, 27 help_text='最大400文字', 28 ) 29 30 image = CloudinaryField( 31 '添付画像', 32 null=True, 33 blank=True, 34 ) 35...
###フォローのmodels.py
Python
1... 2class Follow(models.Model): 3 follow_user = models.ForeignKey( 4 settings.AUTH_USER_MODEL, 5 on_delete=models.CASCADE, 6 related_name='follow_user', 7 ) 8 9 followed_user = models.ForeignKey( 10 settings.AUTH_USER_MODEL, 11 on_delete=models.CASCADE, 12 related_name='followed_user', 13 ) 14 15 follow_date = models.DateTimeField( 16 'フォローした日時', 17 auto_now_add=True, 18 ) 19 20 is_fff = models.BooleanField( 21 '相互フォロー', 22 default=False, 23 ) 24...
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。