Che*_*eng 2 django django-rest-framework
我有以下模型:
class Journal(models.Model):
project_name = models.TextField()
intro = models.TextField(blank=True)
start_time = models.DateTimeField()
end_time = models.DateTimeField()
creator = models.ForeignKey(User)
group = models.OneToOneField(Group)
contact_info = models.TextField(blank=True)
allow_anon = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
我想在用户提交表单时保存此模型的记录。所有必填字段的值都与表单一起提交,因此我认为request.data将在其中包含这些creator字段(字段除外)。
由于我使用令牌身份验证,因此可以在HTTP标头中传递可以标识用户的令牌。根据这篇文章,我可以使用request.META('whatever')从标题中拉出此令牌密钥。然后,我将能够基于令牌检索用户实例。
到目前为止,我的问题是下一步,如何编写一个可以在保存时接收request.data和用户实例的序列化程序?
我认为我应该使用ModelSerializer基于上述定义的模型。但是,如何将用户实例转换为可序列化的形式,以便ModelSerializer在保存时可以使用它们?
如果通过令牌正确地进行了身份验证,则应该在请求对象中提供一个用户属性。
因此,根据在何处添加用于传递用户对象的逻辑,可以在通用视图中使用它:
def perform_create(self, serializer):
serializer.save(user=self.request.user)
Run Code Online (Sandbox Code Playgroud)
或在序列化器内部(假设您的视图已通过context):
def create(self, validated_data):
data = validated_data.copy()
data['user'] = self.context['request'].user
return super(JournalSerializer, self).create(data)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1124 次 |
| 最近记录: |