【发布时间】:2021-01-11 23:59:51
【问题描述】:
我正在为网络博客开发一个 Rest API,我已经创建了自定义用户类并在自定义用户类和帖子类之间建立了关联,但是当我尝试发出帖子请求并将帖子添加到数据库时由于用户和帖子模型之间的关系,我被困在序列化帖子中,我想做的只是让帖子的作者是当前登录的用户,但我实际上不知道该怎么做这个
自定义用户模型:
class CustomUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(max_length=255, unique=True, blank=False, null=False)
username = models.CharField(max_length=255, unique=True, blank=False, null=False)
date_joined = models.DateTimeField(auto_now_add=True)
is_active = models.BooleanField(default=True)
is_superuser = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
objects = CustomUserManager()
def __str__(self):
return self.email
def has_perm(self, perm, obj=None):
return self.is_superuser
后模型:
class Post(models.Model):
title = models.CharField(max_length=255, blank=False, null=False)
content = models.CharField(max_length=10000, blank=False, null=False)
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
def __str__(self):
return self.title
后序列化器:
class PostSerializer(ModelSerializer):
class Meta:
model = Post
# I don't know if this way is right
fields = ('id', 'title', 'content', 'author')
extra_kwargs = {"author": {"read_only": True}}
def create(self, validated_data, request):
post = Post(
title=validated_data['title'],
content=validated_data['content'],
# I don't know what's gonna be assigned to the author
author=
)
post.save()
return post
帖子视图:
class AddPostView(APIView):
serializer_class = serializers.PostSerializer
def post(self, request):
serializer = serializers.PostSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(data=serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
【问题讨论】:
-
更新你的Post Serializer的create方法,可以得到当前用户 --> stackoverflow.com/a/34975314/8150371
-
请出示您的视图文件以便我们提供帮助
-
@GProst 我已经编辑了帖子并添加了帖子视图
标签: python django django-rest-framework