python - python django 休息框架。如何以某种特定格式序列化外键 UUID?
问题描述
我有两个模型 A 和 B,它们都有 UUID 作为主键。有一个B
与 相关的外键A
。
class A(models.Model):
id = models.UUIDField(primary_key=True, editable=False)
desc = models.CharField(max_length=128, null=True)
class B(models.Model):
id = models.UUIDField(primary_key=True, editable=False)
desc = models.CharField(max_length=128, null=True)
for_key = models.ForeignKey(A, on_delete=models.SET_NULL, null=True)
我的序列化程序来了,
class ASerializer(serializers.ModelSerializer):
id = serializers.UUIDField(format='hex')
class Meta:
model = A
fields = ('id', 'desc')
class BSerializer(serializers.ModelSerializer):
id = serializers.UUIDField(format='hex')
class Meta:
model = B
fields = ('id', 'desc', 'for_key')
如您所见,我已将 uuid(主键)更改为十六进制格式。但是 的格式for_key
是默认格式(hex_verbose)。那么如何将模型 B 中的外键序列化为 十六进制格式呢?for_key
解决方案
如果您希望能够指定,for_key
那么您不能使用@Withnail 的答案,因为for_key
存在只读。您应该使用PrimaryKeyRelatedField。
class BSerializer(serializers.ModelSerializer):
id = serializers.UUIDField(format='hex')
for_key = serializers.PrimaryKeyRelatedField(queryset=A.objects.all())
class Meta:
model = B
fields = ('id', 'desc', 'for_key')
推荐阅读
- sed - 使用带减号的 sed
- javascript - 检测浏览器、选项卡以及所有打开的选项卡中的哪个选项卡是否已关闭
- php - 在 MacOS Catalina 上使用 MAMP 在 codeigniter 4 中看不到我的控制器
- ios - UICollectionView:如何使用新的 iOS 13 API UICollectionViewDiffableDataSource & NSDiffableDataSourceSnapshot 进行分页集合?
- node.js - 如何在 node.js 中上传图像文件?
- sum - 如何计算当月的金额总和,包括 Power Bi 中前几个月的金额?
- clojure - 消除clojure中的依赖关系
- node.js - 如何避免在量角器中悬停?
- reactjs - 如何在 React Navigation 5 中全局应用应用程序背景颜色
- tensorflow - 我只需要等效于 cv2.threshold nad np.std 的 tensorflow 函数即可在 tensorflow 1.8 中使用