如何排除ModelMultipleChoiceField中的值? [英] How To Exclude A Value In A ModelMultipleChoiceField?

查看:273
本文介绍了如何排除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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆