Python django:如何将电子邮件\u令牌\u到期日期时间分配为空?
我得到一个错误:Python django:如何将电子邮件\u令牌\u到期日期时间分配为空?,python,django,datetime,django-models,Python,Django,Datetime,Django Models,我得到一个错误: def confirmemail(request,token): user = Users.objects.get(email_token = token) if user: user.email_token = '' user.email_token_expiry = '' user.email_verified = 1 user.active = 1 user.save()
def confirmemail(request,token):
user = Users.objects.get(email_token = token)
if user:
user.email_token = ''
user.email_token_expiry = ''
user.email_verified = 1
user.active = 1
user.save()
return render_to_response('confirmemail.html', {'user': user}, context_instance=RequestContext(request))
email\u token\u expiry
是mysql表中的datetime
字段
如何将email\u token\u expiration
设置为null或空,或设置为正确的格式化null/0/empty datetime
如果有人能帮我解决这个问题,我们将不胜感激
models.py:
ValidationError at /confirmemail/mw054b7el2/
[u'Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format.']
Request Method: GET
Request URL: http://127.0.0.1:8000/confirmemail/mw054b7el2/
Django Version: 1.3.1
Exception Type: ValidationError
Exception Value:
[u'Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format.']
Exception Location: /usr/local/lib/python2.6/dist-packages/django/db/models/fields/__init__.py in to_python, line 710
Python Executable: /usr/bin/python
Python Version: 2.6.6
Python Path:
['/home/user1/djangoblog',
'/usr/lib/python2.6',
'/usr/lib/python2.6/plat-linux2',
'/usr/lib/python2.6/lib-tk',
'/usr/lib/python2.6/lib-old',
'/usr/lib/python2.6/lib-dynload',
'/usr/local/lib/python2.6/dist-packages',
'/usr/lib/python2.6/dist-packages',
'/usr/lib/python2.6/dist-packages/gst-0.10',
'/usr/lib/pymodules/python2.6',
'/usr/lib/pymodules/python2.6/gtk-2.0']
我想你需要的是为进一步的数据设置令牌!试试这个:
class Users(models.Model):
username = models.CharField(max_length=255,unique=True)
slug = models.CharField(max_length=255, default='0')
password = models.CharField(max_length=300)
password_token = models.CharField(max_length=300, default='0')
email = models.CharField(max_length=255, unique=True)
email_verified = models.BooleanField(default=False)
email_token = models.CharField(max_length=255)
email_token_expiry = models.DateTimeField()
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):
def __init__(self, *args, **kwargs):
super(UsersModelForm, self).__init__(*args, **kwargs)
self.fields.keyOrder = ['username', 'email', 'password', 'passwordrepeat']
passwordrepeat = forms.CharField(max_length=300, widget=forms.PasswordInput, label=u'Repeat Password')
class Meta:
model = Users
fields = ('username', 'password', 'passwordrepeat', 'email')
widgets = {
'password' : forms.PasswordInput(),
}
def clean(self):
cleaned_data = self.cleaned_data
password = cleaned_data.get("password")
passwordrepeat = cleaned_data.get("passwordrepeat")
if password != passwordrepeat:
raise forms.ValidationError("Passwords must match.")
return cleaned_data
编辑
或者,如果要将数据设置为空白| null,则只需修改模型字段:
import datetime
user.email_token_expiry = datetime.datetime.now()+datetime.timedelta(hours=24)
这将允许u设置为无或空白
更多文档:
再想想,在您更改模型后,如果您使用的是south,请不要忘记应用移植;如果您没有移植工具集,请删除表格并重新创建它
EDIT2
确保删除表用户,然后立即运行syncdb。(如果你没有南集)
之后,您可以检查数据库,看看该字段是否可以为空!在数据库中发出一个“desc..users”,以便您可以对此进行双重检查。
如果仍不工作请指定
电子邮件\u令牌\u到期
,如@ArthurNeves在models.py中所建议的那样
email_token_expiry = models.DateTimeField(blank=True, null=True)
然后,当您设置email\u token\u expiration
时,它必须是:
email_token_expiry = models.DateTimeField(null=True, blank=True)
不是:
Users
模型是什么样子的?我添加了Users
模型。再看一遍,你就明白了。你误解了这个问题。在注册期间设置令牌。现在,在确认电子邮件后,我需要将此时间设置为NULL或空。您发布的内容是在def register(request):
方法中完成的。我已经设置了email\u-token\u-expiry=models.DateTimeField(null=True,blank=True)
仍然存在相同的错误,user.email\u-token\u-expiry=''
,让您删除表并再次运行syncdb?是的,我删除了表,然后运行,python manage.py syncdb
检查我的第二次编辑!如果仍然不起作用!删除所有数据库并重新创建,然后运行syncdb!
user.email_token_expiry = None
user.email_token_expiry = ''