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 = ''