2014-10-12 47 views
0

我想显示登录用户的表格,他们可以输入namesensitivity,但是这需要与登录用户相关联(目前正在尝试与外键和init)。这是我的方法:Django:自动输入当前登录的用户作为值的形式

浏览:

@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) 

回答

0

变化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') 
+0

感谢哈桑,我觉得我按照这里的逻辑:d我现在越来越错误:TypeError at/tracker/restricted/ __init __()得到关键字参数'user'的多个值 – William 2014-10-12 15:24:41

相关问题