繁体   English   中英

Django 在保存时自动将当前用户保存在模型中

[英]Django auto save the current user in the model on save

我试图在保存新数据时自动保存用户。 我的意思是我想为发布新事物(提交表单)的用户保存用户 ID,而不要求该用户从下拉列表中选择他的帐户(来自 User ForeignKey 的下拉列表)


尝试 1:

模型.py

class Feedback(models.Model):
       .
       .
    author = models.ForeignKey(
        get_user_model(),
        on_delete=models.CASCADE,
        editable=False,
        )

    def save(self, *args, **kwargs):
        self.author = get_user_model().objects.get(id=2)    #############
        return super().save(*args, **kwargs)

如果我对用户 ID get(id=2)进行硬编码,它就可以工作。 如何使 id 动态化?



编辑:


尝试 2:

我也试过用视图来做:

模型.py

class Feedback(models.Model):
       .
       .
    author = models.ForeignKey(
        get_user_model(),
        on_delete=models.CASCADE,
        editable=False,
        null=True
        blank=True
        )

    # without save()

视图.py

class FeedbackForm(ModelForm):
    class Meta:
        model = Feedback
        fields = "__all__"


class FeedbackListView(generics.ListCreateAPIView):
    queryset = Feedback.objects.all()
    serializer_class = FeedbackSerializer
    from_class = FeedbackForm
    permission_classes = [FeedbackPermission,]  # I also tried AllowAny

    def form_valid(self, form, FeedbackForm):
        obj = form.save(commit=False)  # I also tried self.obj = ...
        obj.author = self.request.user  # I also  tried self.obj.author = ...
        obj.save()   # I also  tried self.obj.save()
        return super().form_valid(form)

但是在第二次尝试(使用表单)时,作者字段仍然为空。



ListCreateAPIView没有方法form_valid ,看看这个

在您的class FeedbackListView中,您需要执行以下操作:

class FeedbackListView(generics.ListCreateAPIView):
    queryset = Feedback.objects.all()
    serializer_class = FeedbackSerializer

    def perform_create(self, serializer):
        # The request user is set as author automatically.
        serializer.save(author=self.request.user)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM