如何排除ModelMultipleChoiceField中的值? [英] How To Exclude A Value In A ModelMultipleChoiceField?
问题描述
我不希望登录的用户显示在此ModelMultipleChoiceField上,以限制自己与自己建立以下关系:那么我如何从登录的用户中排除queryset,可能是一个简单的修复,但我是Django的新手,现在已经不了我了几个小时。
I do not want the logged in user to show up on this ModelMultipleChoiceField in order to restrict themselves from creating a following relationship with themselves? So how do I exclude the logged in user from the queryset, probably an easy fix but I'm new to Django and it has eluded me for a few hours now.
form.py
class Add_Profile(forms.ModelForm):
def __init__(self,*args, **kwargs): # initializing your form in other words loading it
super(Add_Profile, self).__init__(*args, **kwargs)
user_id = kwargs.pop('user_id') # taking user_id out of the querylist
self.fields['follows'] = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple(), queryset=UserProfile.objects.filter(~Q(id=user_id)))
class Meta:
model = UserProfile
fields = (
'bio',
'follows',
'theme',
'profile_picture',
)
Views.py
@login_required
def edit_profile(request, user_id):
userprofile = UserProfile.objects.get(pk=user_id)
if request.method == 'POST':
edit_profile = Add_Profile(request.POST, request.FILES, instance=userprofile, user_id=request.user.id)
if edit_profile.is_valid():
edit_profile.save()
return redirect('/home/user/{0}/'.format(request.user.username))
else:
print edit_profile.errors
else:
edit_profile = Add_Profile(instance=userprofile, user_id=request.user.id)
return render (request, 'edit.html', {'form': edit_profile,})
错误: init ()得到一个意想不到的关键字参数'user_id'
Error: init() got an unexpected keyword argument 'user_id'
推荐答案
定义一个 __ init __
表单类的方法。将登录的用户ID传递给窗体同时初始化它,这将与模型窗体一起使用。
Define an __init__
method for the form class. Pass the logged in userid to the form while initializing it, this will work with a model form.
def __init__(self, *args, **kwargs):
user_id = kwargs.pop('user_id')
super(Add_Profile, self).__init__(*args, **kwargs)
self.fields['follows'] = forms.ModelMultipleChoiceField(queryset=UserProfile.objects.filter(~Q(user_id=user_id)))
在初始化表单时,可以传递user_id
While initializing your form, you can pass user_id
address_form = Add_Profile(request.POST, user_id=request.user.id)
这篇关于如何排除ModelMultipleChoiceField中的值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!