Django:在窗体中自动输入当前登录的用户作为值

2024-06-13 12:29:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图向登录的用户显示一个表单,在这个表单中他们可以输入namesensitivity,但是这需要与登录的用户相关联(当前尝试使用外键和init)。这是我的方法:

视图:

@login_required
def restricted(request):
    context = RequestContext(request)
    if request.method == 'POST':
        form = TrackForm(request.user, request.POST)
        if form.is_valid():
            form.save(commit=True)

            return index(request)
        else:
            print form.errors
    else:
        form = TrackForm()

    return render_to_response('tracker/restricted.html', {'form': form}, context)

表格:

class TrackForm(forms.ModelForm):
    name = forms.CharField(help_text="Please enter a name")
    sensitivity = forms.IntegerField(help_text="Sensitivity: 1=Low Sensitivity, 2=Standard Sensitivity, 3=Highly Sensitive", initial=0)

    def __init__(self, user, *args, **kwargs):
        self.user = user
        super(TrackForm, self).__init__(*args, **kwargs)

    class Meta:
        model = ToTrack
        fields = ('name','sensitivity')

型号:

class ToTrack(models.Model):
    name = models.CharField(max_length=128)
    sensitivity = models.IntegerField(default=0)
    user = models.ForeignKey(User)

    def __unicode__(self):
        return self.name

我当前收到错误消息:

TypeError at /tracker/restricted/
__init__() takes at least 2 arguments (1 given)

Tags: nameselfformreturninitmodelsrequestdef
1条回答
网友
1楼 · 发布于 2024-06-13 12:29:43

更改views.py如下(我注释更改行):

@login_required
def restricted(request):
    context = RequestContext(request)
    if request.method == 'POST':
        form = TrackForm(request.POST, user=request.user) #this line change
        if form.is_valid():
            form.save(commit=True)

            return index(request)
        else:
            print form.errors
    else:
        form = TrackForm(user=request.user) #this line change

    return render_to_response('tracker/restricted.html', {'form': form}, context)

form改成这样:

class TrackForm(forms.ModelForm):
    name = forms.CharField(help_text="Please enter a name")
    sensitivity = forms.IntegerField(help_text="Sensitivity: 1=Low Sensitivity, 2=Standard Sensitivity, 3=Highly Sensitive", initial=0)

    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user', None)
        if user:
            self.user = user
        super(TrackForm, self).__init__(*args, **kwargs)

    class Meta:
        model = ToTrack
        fields = ('name','sensitivity')

相关问题 更多 >