自动为AuthUser生成last_login和date_joined值

时间:2015-10-12 07:23:56

标签: django

我正在使用Django的原生AuthUser表来存储注册时的用户信息。我的AuthUser表如下所示

class AuthUser(models.Model):
    password = models.CharField(max_length=128)
    last_login = models.DateTimeField(blank=True, null=True)
    is_superuser = models.IntegerField()
    username = models.CharField(unique=True, max_length=30)
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    email = models.CharField(max_length=254)
    is_staff = models.IntegerField()
    is_active = models.IntegerField()
    date_joined = models.DateTimeField()

    class Meta:
        managed = False
        db_table = 'auth_user'

我正在保存从表单返回的数据,如下所示。如您所见,我手动添加date_joined的值。是否可以自动生成date_joined和last_login的值而无需人工干预?

if(request.method == 'POST'):

  form = SignupForm(request.POST)
  if(form.is_valid()):
     firstname = request.POST['firstname']
     lastname = request.POST['lastname']
     email = request.POST['email']
     password = request.POST['password']
     confirmpassword = request.POST['password2']
     country = request.POST.get('country','None')
     UserObj = AuthUser()
     UserObj.first_name = firstname
     UserObj.last_name= lastname
     UserObj.email= email
     UserObj.password = password
     UserObj.is_superuser=True
     UserObj.is_staff=True
     UserObj.is_active= True
     UserObj.date_joined= datetime.datetime.now()
     id = UserObj.save()

1 个答案:

答案 0 :(得分:0)

DateTimeFields有一个auto_now_add参数

date_joined = models.DateTimeField(auto_now_add=True)
  

首次创建对象时自动将字段设置为现在。用于创建时间戳。请注意,始终使用当前日期;它不仅仅是您可以覆盖的默认值。因此,即使您在创建对象时为此字段设置了值,也会将其忽略。如果您希望能够修改此字段,请设置default = timezone.now(来自django.utils.timezone.now())而不是auto_now_add = True。

由于您需要确定用户何时实际登录,因此上次登录有点困难,这需要人工干预。 Django似乎通过发送login view信号

在其update_last_login中执行此操作
def update_last_login(sender, user, **kwargs):
    """
    A signal receiver which updates the last_login date for
    the user logging in.
    """
    user.last_login = timezone.now()
    user.save(update_fields=['last_login'])
user_logged_in.connect(update_last_login)