提问人:Tom Xavier 提问时间:11/14/2023 最后编辑:Tom Xavier 更新时间:11/15/2023 访问量:62
如何将发出请求的用户分配给 Django 模型中的外键字段
How to assign the user making the request to a foreign key field in Django models
问:
我目前正在开发一个类似于 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."
]
}
答:
0赞
CoffeeBasedLifeform
11/15/2023
#1
perform_create
从不调用,因为在此之前验证失败。
从验证中删除该字段(例如,通过从序列化程序中排除该字段),或在序列化程序的初始数据中为该字段提供一个值,以便验证成功。owner
评论