私は次のモデルを持っています:
クラス UserProfile(models.Model):
user = models.OneToOneField(User, related_name="user")
people_interested = models.ManyToManyField(User, related_name="interested")
ここで、ユーザーが people_interested を選択できるフォームを提供するフォームが必要なので、次の forms.py を追加します。
class ChooseForm(forms.Form):
q_set = User.objects.all()
peers = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple, queryset = q_set)
そしてビューで:
form = ChooseForm(data = request.POST or None)
if request.POST and form.is_valid():
uprofile, created = UserProfile.objects.get_or_create(user=request.user)
uprofile.people_interested = form.cleaned_data['peers']
uprofile.save()
return HttpResponseRedirect("/")
else:
return render(request, "form_polls.html", {'form':form})
しかし、これの問題は、現在のユーザー インスタンスも表示されることです。そこで、views.py で次のことを試しました。
form = ChooseForm(request.user.id, data = request.POST or None)
そしてforms.pyで
class ChooseForm(forms.Form):
def __init__(self, uid, *args, **kwargs):
super(ChooseForm, self).__init__(*args, **kwargs)
self.fields['peers'].queryset = User.objects.exclude(id=uid)
q_set = User.objects.all()
peers = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple, queryset = q_set)
しかし、上記はクリーンな実装ではありません。それを行うためのより良い方法はありますか??