【问题标题】:Access request.user in modelForm在modelForm中访问request.user
【发布时间】:2013-07-20 01:34:39
【问题描述】:

如果我正在使用我的views.py 看起来像这样的模型表单:

def dog_image_upload(request):
    if request.user.is_authenticated():
        if request.method == 'POST':
            form = DogImageForm(request.POST, request.FILES)
            if form.is_valid():
                form.save()
        else:
            form = DogImageForm(user)
        return render_to_response("dog-image-upload.html", {'form': form}, context_instance=RequestContext(request))
    else:
        return HttpResponseRedirect('/')

在 model.py 中我想这样做:

class DogImageForm(ModelForm):
    dogs = forms.ModelChoiceField(queryset=Dog.objects.filter(user=request.user))
    class Meta:
        model = ResultsUpload
        fields = ['dogs','image']

但是,我在尝试将用户发送到 model.py 时遇到问题 在这方面的帮助会很棒而且很有价值!

【问题讨论】:

    标签: python django modelform


    【解决方案1】:

    您必须在模型表单的__init__ 中进行操作

    class DogImageForm(ModelForm):
        dogs = forms.ModelChoiceField(queryset=Dog.objects.none())
        class Meta:
            model = ResultsUpload
    
        def __init__(self, user, *args, **kwargs):
            super(DogImageForm, self).__init__(*args, **kwargs)
            self.fields['dogs'].queryset = Dog.objects.filter(user=user)
    

    在表单初始化期间,

    form = DogImageForm(user=request.user)
    

    【讨论】:

    • 非常感谢您的帮助,它现在可以毫无错误地使用您的解决方案,但是,列表中没有任何值。是因为查询没有找到要返回的值吗?
    • yeah.. 验证是否在 django shell 中使用指定用户运行此查询 (Dog.objects.filter(user=user))
    • 啊,新手错误我的问题是request.user 来自django.contrib.auth.models import user,其中Dog 模型中的用户字段是指向另一个模型UserProfile 的链接。我应该更好地使用我的变量名。谢谢@karthikr,我无法理解其他人对这个问题的解决方案,你的很棒。
    • @Alex Stewart 我也是这种情况,但我在 基于类的创建视图中使用了我的 form 并且我使用了 form_class=DogImageForm ,如何初始化我的 form 给它 request.user 作为参数
    猜你喜欢
    • 2011-04-09
    • 2011-01-16
    • 2012-08-19
    • 1970-01-01
    • 2012-01-20
    • 2018-07-18
    • 2011-04-04
    • 2011-10-16
    相关资源
    最近更新 更多