发布于2023-11-18 10:24 阅读(10653) 评论(0) 点赞(15) 收藏(0)
我目前正在开发一个类似于discord 的网络应用程序。我试图将发送创建服务器请求的用户设置为服务器的所有者,以便他唯一想要输入的内容是诸如名称、图标和描述之类的详细信息。这是我的服务器模型:
class Server(models.Model):
name = models.CharField(max_length=30)
owner = models.ForeignKey(
settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="server_owner")
creation_date = models.DateTimeField(auto_now_add=True)
description = models.CharField(max_length=250, null=True, blank=True)
member = models.ManyToManyField(
settings.AUTH_USER_MODEL, related_name="servers", through='ServerMember')
icon = models.FileField(
upload_to=server_icon_upload_path, null=True, blank=True)
def __str__(self):
return self.name
def save(self, *args, **kwargs):
is_new_server = self._state.adding
if is_new_server:
super().save(*args, **kwargs)
try:
member_role = Role.objects.create(
name="member",
server=self
)
server_member = ServerMember.objects.create(
user=self.owner, server=self)
server_member.role.add(member_role)
except Exception as e:
print(f"Error creating 'member' role: {e}")
if self.id:
existing = get_object_or_404(Server, id=self.id)
if existing.icon and existing.icon != self.icon:
# Delete the old icon
existing.icon.delete(save=False)
super().save(*args, **kwargs)
序列化器:
class ServerSerializer(serializers.ModelSerializer):
class Meta:
model = Server
fields = '__all__'
我尝试重写perform_create函数,但它不起作用:
class ServerCreateView(generics.CreateAPIView):
queryset = Server.objects.all()
serializer_class = ServerSerializer
permission_classes = [IsAuthenticated]
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
这是我在测试 api 时遇到的错误:响应
{
"owner": [
"This field is required."
]
}
perform_create
永远不会被调用,因为在此之前验证失败。
从验证中删除该owner
字段(例如,通过从序列化程序中排除该字段),或者在序列化程序的初始数据中为该字段提供一个值,以便验证成功。
作者:黑洞官方问答小能手
链接:https://www.pythonheidong.com/blog/article/2039598/2db4c9d60f0c3c9805bf/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!