如何在链接的Django REST模型中更新数据?

发布于 2025-02-05 19:48:50 字数 1670 浏览 4 评论 0原文

如何在链接的Django REST模型中更新数据
这是我的JSON

{
  "doc_type": 1,
  "warehouse": 4,
  "date": "2022-06-09",
  "number": 980,
  "contragent": 2,
  "comment": "testcom;mgment",
  "items": [
    {
      "product": 7,
      "buy_price": "168.00",
      "sell_price": "500.00",
      "quantity": 17
    },
    {
      "product": 8,
      "buy_price": "168.00",
      "sell_price": "500.00",
      "quantity": 17
    }
  ]
}

,我无法更改“项目”字典中的数据 如果我只提交一个“产品”元素,将删除另一个元素吗?例如,如果三个会添加?
这是我目前的目前,记录是没有问题的,但我只能更新“托运诺特”模型

#serialisers.py

class ConsignmentNoteSerializer(serializers.ModelSerializer):
    creator = serializers.HiddenField(default=serializers.CurrentUserDefault())
    doc_type = serializers.IntegerField(read_only=True)
    # contragent_detail = ContragentSerializer(source='contragent', read_only=True)
    items = ConsignmentItemSerializer(many=True)


    class Meta:
        model = ConsignmentNote
        fields = ['doc_type', "warehouse", 'date', 'number', 'contragent', 'comment', 'creator', 'items']
        read_only_fields = ['id' ]


    def create(self, validated_data):
        items = validated_data.pop('items')
        note = ConsignmentNote.objects.create(**validated_data, doc_type = 1)
        for item in items:
            product = item.pop('product')
            item = ConsignmentItem.objects.create(consignmentnote=note, product=product ,**item)
        return note
    
    def update(self, instance, validated_data):
        instance.date = validated_data.pop('date', instance.date)
        instance.comment = validated_data.pop('comment', instance.comment)
        return instance

How do I update data in a linked django rest model
Here is my json

{
  "doc_type": 1,
  "warehouse": 4,
  "date": "2022-06-09",
  "number": 980,
  "contragent": 2,
  "comment": "testcom;mgment",
  "items": [
    {
      "product": 7,
      "buy_price": "168.00",
      "sell_price": "500.00",
      "quantity": 17
    },
    {
      "product": 8,
      "buy_price": "168.00",
      "sell_price": "500.00",
      "quantity": 17
    }
  ]
}

I can't change the data in the "items" dictionary
If I submit only one "product" element, will the other one be deleted? And if, for example, three, will it be added?
this is what I have at the moment, records are created without problems, but I can only update the "ConsignmentNote" model

#serialisers.py

class ConsignmentNoteSerializer(serializers.ModelSerializer):
    creator = serializers.HiddenField(default=serializers.CurrentUserDefault())
    doc_type = serializers.IntegerField(read_only=True)
    # contragent_detail = ContragentSerializer(source='contragent', read_only=True)
    items = ConsignmentItemSerializer(many=True)


    class Meta:
        model = ConsignmentNote
        fields = ['doc_type', "warehouse", 'date', 'number', 'contragent', 'comment', 'creator', 'items']
        read_only_fields = ['id' ]


    def create(self, validated_data):
        items = validated_data.pop('items')
        note = ConsignmentNote.objects.create(**validated_data, doc_type = 1)
        for item in items:
            product = item.pop('product')
            item = ConsignmentItem.objects.create(consignmentnote=note, product=product ,**item)
        return note
    
    def update(self, instance, validated_data):
        instance.date = validated_data.pop('date', instance.date)
        instance.comment = validated_data.pop('comment', instance.comment)
        return instance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文