重写模型中的save()方法,用当前用户Django预填充它
所以我知道如何使用当前用户名预填充模型。 但如何(如果可能的话)在模型中重写save()方法,用当前用户id或当前用户名预填充它呢?据我所知,我无法从模型变量中获取request.user 这是我的模型。提前谢谢你重写模型中的save()方法,用当前用户Django预填充它,django,django-models,Django,Django Models,所以我知道如何使用当前用户名预填充模型。 但如何(如果可能的话)在模型中重写save()方法,用当前用户id或当前用户名预填充它呢?据我所知,我无法从模型变量中获取request.user 这是我的模型。提前谢谢你 class Post(models.Model): title = models.CharField(max_length=255) slug = models.SlugField(max_length=255, verbose_name='url', unique=
class Post(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField(max_length=255, verbose_name='url', unique=True)
author = models.ForeignKey(User, max_length=100, on_delete=models.CASCADE, default='1')
content = models.TextField(blank=True)
created_at = models.DateTimeField(auto_now_add=True, verbose_name='created at')
photo = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True)
views = models.IntegerField(default=0, verbose_name='views')
category = models.ForeignKey(Category, on_delete=models.PROTECT, related_name='posts')
tags = models.ManyToManyField(Tag, blank=True, related_name='posts')
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
if not self.slug:
self.slug = slugify(self.title)
super().save()
def get_absolute_url(self):
return reverse('post', kwargs={'slug': self.slug})
您可以通过中间件实现这一点
from app.models import Post
class GetUserMidlleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
Post.thread.request = request
response = self.get_response(request)
return response
class Post(Models.model):
thread = threading.local()
def save(self,*args,**kwargs):
self.user = self.thread.request.user
super().save(*args,**kwargs)
在save函数中,从线程获取用户,如图所示您可以在视图或表单中执行此操作,而不是在模型的
save
方法中执行此操作。