django rest框架ModelSerializer,http PUT和POST的验证

时间:2016-02-19 14:23:08

标签: django validation serialization django-rest-framework http-put

所以我的模型定义如下:

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')

所以

  1. 我使用POSTclient_id=1以及channel_id=1向订阅者发出user_id=1个请求。这导致创建Subscriber,例如id=1
  2. 现在,我想更改上面step 1中创建的订阅者的user_id。
  3. 因此PUT client_id=1 user_id=2 channel_id=1 Subscriber请求id=1 client_id channel_id Subscriber
  4. 在此步骤中,序列化程序会抛出错误,因为PUTid=1的组合不是唯一的,这是Subscriber模型中的约束。
  5. 我希望当我使用Subscriber发出id=1请求时,序列化程序会实际检查除product_qty之外的所有onchange_hitung_kuota()模型的约束def onchange_hitung_kuota(self, cr, uid, ids, product_qty, prod_qtys) }。

    django rest框架是否提供了满足此条件的任何内容。或者我必须为创建和更新编写不同的序列化程序,我认为这是最丑陋的解决方案。

    如果模型的结构无法更改,那么这个问题的最佳解决方案是什么。

1 个答案:

答案 0 :(得分:1)

我想也许你正在寻找UpdateAPIView