如何通过形式传递用户

问题描述:

views.py如何通过形式传递用户

def add_phone(request): 
    phoneForm = PhoneForm() 
    user = request.user 
    phone = Phone_info.objects.get(user=2) 
    phoneForm = PhoneForm(instance=phone)  
    phone.user=request.user 
    if request.method=='POST':   
     phoneForm = PhoneForm(request.POST,request.user,instance=phone) 
     user=request.user  
     if phoneForm.is_valid(): 
      phone=phoneForm.save(commit=False) 
      phone.user=request.user 
      phone.save() 
     return redirect('/member/contact-list/') 

models.py

class Phone_info(models.Model): 
    user = models.ForeignKey(User, null=True) 
    name1 = models.CharField('Name', max_length=100, null=True, blank=True) 

forms.py

class PhoneForm(forms.ModelForm): 

    class Meta: 
     model = Phone_info 

在views.py的form.is_valid()是没有发生,因为用户没有通过形式。通过什么方法我可以通过形式传递用户。我在谷歌搜索相同,没有得到任何idea.Please帮助我这一点。

+0

为什么'user = 2'在这里:'phone = Phone_info.objects.get(user = 2)'? – 2013-05-06 15:07:19

+0

这很奇怪:这个phone = Phone_info.objects.get(user = 2)'会执行这个sql:'SELECT * FROM Phone_info WHERE user_id = 2'这样就像你用查询“硬连线” = 2。我认为你所要做的是这样的:'phone = Phone_info.objects.get(user = request.user)' – 2013-05-06 15:21:42

+0

这是好的,我没有修改 – user2086641 2013-05-06 15:34:11

在初始化的形式,您可能做到这一点:

phoneForm = PhoneForm({'user':request.user.id}) 

这样你传递谁提出的请求形式向用户。

下面是完整的方法:

def add_phone(request): 
    user = request.user 
    phoneForm = PhoneForm({'user':user.id}) 
    if request.method=='POST':   
     phoneForm = PhoneForm(request.POST) 
     if phoneForm.is_valid(): 
      phone=phoneForm.save(commit=False) 
      phone.save() 
     return redirect('/member/contact-list/') 

希望它能帮助。

+0

这是给这个错误int()参数必须是一个字符串或一个数字,而不是'用户' – user2086641 2013-05-06 15:33:27

+0

任何形式验证在forms.py – user2086641 2013-05-06 15:34:55

+0

更新!看看它是否工作:更改为'user.id' – 2013-05-06 15:36:14

周围的一些开关应该解决您的问题

def add_phone(request): 
    if request.method == 'POST':   
     phoneForm = PhoneForm(request.POST) 
     phoneForm.user = request.user #if a phone has a user and a form has a  
     if phoneForm.is_valid(): 
      phone = phoneForm.save(commit=False) 
      phone.save() 
     return redirect('/member/contact-list/') 

我重构了很多,因为你有一些代码,是多余的。 我删除了大部分引用request.user

+0

对不起,错过了'phone'-更新了代码, 再试一次。 - 另外,你可以发布你的“表格”吗? – 2013-05-06 15:20:34