【发布时间】:2016-06-01 03:48:43
【问题描述】:
所以我有一个模型定义如下:
class Subscriber(models.Model):
client_id = models.IntegerField()
user_id = models.IntegerField()
channel = models.ForeignKey(to=Channel, related_name='channel_subscribers')
class Meta:
unique_together = ('client_id', 'channel')
这个模型的序列化器如下:
class SubscriberSerializer(serializers.ModelSerializer):
class Meta:
model = Subscriber
fields = ('id', 'client_id', 'user_id', 'channel')
所以
- 我使用
client_id=1和channel_id=1和user_id=1向订阅者发出POST请求。这导致创建一个Subscriber,比如id=1 - 现在我想更改上面
step 1中创建的订阅者的user_id。 - 所以我用
client_id=1、user_id=2和channel_id=1为Subscriber用id=1发出PUT请求。 - 在这一步,序列化程序抛出一个错误,因为
client_id和channel_id的组合不是唯一的,这是Subscriber模型中的一个约束。
我希望当我使用id=1 发出PUT 请求时,序列化程序实际上会针对除Subscriber 和id=1 之外的所有Subscriber 模型检查此约束。
django rest 框架是否提供任何东西来满足这个标准。或者我必须为创建和更新编写不同的序列化程序,我认为这是最丑陋的解决方案。
如果模型的结构不能改变,什么是这个问题的最佳解决方案。
【问题讨论】:
标签: django validation serialization django-rest-framework http-put