2013-05-06 41 views
0

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

回答

1

在初始化的形式,您可能做到這一點:

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

0

周圍的一些開關應該解決您的問題

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