【发布时间】:2020-04-28 19:51:02
【问题描述】:
我有以下型号。
class ServerGroup(models.Model):
name = models.SlugField(unique=True)
factor = models.IntegerField()
class ServerGroupMember(models.Model):
class Meta:
unique_together = (
("server_group", "position"),
("server_group", "server"),
)
position = models.IntegerField()
server_group = models.ForeignKey(
"ServerGroup", related_name="servers", on_delete=models.CASCADE
)
server = models.ForeignKey("Server", on_delete=models.CASCADE)
ServerGroup 有几个属性name 和factor,以及ServerGroupMember 对象的集合。每个ServerGroupMember 对象都包含一个整数position 和一个对Server 对象的引用。对于给定的ServerGroup,position 必须是唯一的,对于给定的ServerGroup,server 必须是唯一的。但是,在全局范围内,位置和服务器对象不必是唯一的,因为在 2 个 ServerGroups 中可能会在位置 1 包含一个服务器,并且同一个 Server 可能会出现在多个 Server Groups 中,而不是在同一个 Server Groups 中出现多次。
鉴于我有以下序列化程序,我如何验证上述内容?该模型目前确实在数据库级别验证条件,但如果我试图违反它,将引发唯一约束错误。我想要的是能够在我的视图中检测到这一点,这样我就可以在它有机会访问数据库并引发该异常之前返回适当的验证错误消息响应。
class ServerGroupMemberSerializer(serializers.ModelSerializer):
class Meta:
model = models.ServerGroupMember
fields = ("position", "server")
server = serializers.SlugRelatedField(
slug_name="name", queryset=models.Server.objects.all()
)
class SrvereGroupSerializer(serializers.ModelSerializer):
class Meta:
model = models.ServerrGroup
fields = ("name", "factor", "servers")
servers = ServerGroupMemberSerializer(many=True, required=False)
def create(self, validated_data): ...
def update(self, validated_data): ...
【问题讨论】:
标签: django django-rest-framework django-views django-serializer django-validation