我想在模型上做这件事,因为我也在使用REST API。
我有一个名为Seen
class Seen(models.Model):
seen = models.BooleanField(
verbose_name=_("Is active"), default=True,
help_text=_("Inactive devices will not be sent notifications")
)
user = models.ForeignKey(
SETTINGS["USER_MODEL"], blank=True, null=True, on_delete=models.CASCADE
)
post = models.ForeignKey(Posts)
我想重写我自定义的基于类的视图,以便每次经过身份验证的用户访问DetailView
时,我都会创建Seen
的实例。
答案 0 :(得分:0)
在基于班级的视图中,您可以覆盖方法get
:
def get(self, request, *args, **kwargs):
# fetch your values from request.GET.get('key')
# and play around with it
return self.render_to_response(context)
或者,因为您正在使用DetailView
:
def get_object(self, queryset=None):
# key for Post's id (consider it as 'id'), you maybe named it differently
post_id = self.kwargs.get('id')
if post_id is None:
raise Http404
try:
post = Post.objects.get(id=post_id) # fetch your post
user = self.request.user # considering your user is authenticated
# Create Seen object and save it with params,
# seen field is optional, since you set defaul value
seen_object = Seen.objects.create(post=post, user=user, seen=True)
except Post.DoesNotExist: # if wrong id was passed
raise Http404
return post # return an object for your DetailView
P.S。:为了确保您的用户经过身份验证,请在您的视图中添加LoginRequiredMixin
,例如:PostDetailView(LoginRequiredMixin, DetailView)
并设置login_url='login'