我正在使用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()
答案 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)