2012-01-14 123 views
-1
def register(request): 
    flag = True 
    possible = 'abcdefghijklmnopqrstuvwxyz' 
    token = '' 
    length = 10 
    i = 0 

    current_datetime = datetime.datetime.now() 

    user = UsersModelForm() 
    if request.method == 'POST': 
     userf = UsersModelForm(request.POST) 
     username = userf.data['username'] 
     password = userf.data['password'] 
     passwordrepeat = userf.data['passwordrepeat'] 
     email = userf.data['email'] 

     if password != passwordrepeat: 
      flag = False 
      passVariable = {'user':user, 'flag': False} 
      return render_to_response('register.html', passVariable, context_instance=RequestContext(request)) 

     elif password == passwordrepeat: 
      for i in range(1,10): 
       temp = random.choice(possible) 
       token = token + temp 

      print token 
      userf.email_token = token 
      userf.email_token_expiry = current_datetime + timedelta(1) 
      if userf.is_valid(): 
       check = userf.save() 
      return HttpResponseRedirect('/') 

userf.save()正在插入一行,但它不保存email_token,email_token_expiry,它只是插入用戶名,密碼,電子郵件和默認值,因爲它在models.py中。這不是爲數據庫表保存價值,爲什麼?

models.py:

class Users(models.Model): 
    username = models.CharField(max_length=255) 
    slug = models.CharField(max_length=255, default='0') 
    password = models.CharField(max_length=300) 
    passwordrepeat = models.CharField('Repeat Password', max_length=300) 
    password_token = models.CharField(max_length=300, default='0') 
    email = models.CharField(max_length=255) 
    email_verified = models.BooleanField(default=False) 
    email_token = models.CharField(max_length=255) 
    email_token_expiry = models.DateTimeField(auto_now_add=True) 
    tos = models.BooleanField(default=False) 
    active = models.BooleanField(default=False) 
    last_login = models.DateTimeField(auto_now_add=True) 
    last_action = models.DateTimeField(auto_now_add=True) 
    is_admin = models.BooleanField(default=False) 
    role = models.CharField(max_length=255, default='0') 
    created = models.DateTimeField(auto_now_add=True) 
    modified = models.DateTimeField(auto_now_add=True) 

    def __unicode__(self): 
     return self.username 

class UsersModelForm(forms.ModelForm): 
    class Meta: 
     model = Users 
     fields = ('username', 'password', 'passwordrepeat', 'email') 
     widgets = { 
      'password' : PasswordInput(), 
      'passwordrepeat' : PasswordInput(), 
     } 

有人可以幫我解決這個問題?爲什麼不把價值保存到其他領域?

+1

1.你還沒有讀到模型形式的文檔。 2.你仍**試圖將密碼保存在數據庫中。 – 2012-01-14 20:56:06

+0

不,這只是一個測試。 – shibly 2012-01-14 20:57:23

回答

1

試試這個:

 if userf.is_valid(): 
      user = userf.save(commit=False) 
      user.email_token = token 
      user.email_token_expiry = current_datetime + timedelta(1) 
      user.save() 
+0

爲什麼我要用這種方式?普通的'userf.save()'方式有什麼問題? – shibly 2012-01-14 21:01:09

+0

'userf'實際上是'UserModelForm'的一個實例,而不是'Users'。如果你真的想把它分配給'userf',你應該分配給'userf.data ['email_token']',我認爲這可行,但我不確定。我會按我的方式去做。 – 2012-01-14 21:04:00

+0

我在提交表單後發現錯誤:IntegrityError at/register (1048,「列'email_token_expiry'不能爲空')http://pastebin.com/LxzY5Vs6 – shibly 2012-01-14 21:12:50

0

它只插入您在fields中指定的字段的值。將email_token,email_token_expiry添加到該列表中,這些也將被保存到數據庫中。

編輯:哎呀,是的。請改爲:

check = userf.save(commit=False) 
check.email_token = token 
check.email_token_expiry = current_datetime + timedelta(1) 
check.save() 

表單對象不會保存附加到它的附加信息(AFAIK)。您需要從save()中獲取對象,然後分配這些值。 commit=False使表單保存到數據庫。然後,您添加所需的額外信息並保存該對象。

+0

這將導致這些字段向用戶顯示。 – 2012-01-14 20:58:07

+0

不,如果您在字段數組中添加了'email_token'和'email_token_expiry','{{form}}''也會在模板中顯示這些文本框。 – shibly 2012-01-14 21:02:14

+0

如果你問我,那編輯就很精彩;-) – 2012-01-14 21:05:07

相關問題