python - 如何在 Django Rest 中使用 Post 请求更新其他表的字段
问题描述
我是 Django 新手,在发布或创建新条目时更新其他表的字段时遇到问题。我不知道该怎么做。我已经弄清楚了 2 天来如何通过序列化程序来做到这一点,或者如果不是通过序列化程序更好地实现它。
基本上,我想在每次创建交付时更新 Fruits 的状态。所以我可以说它是否可用。下面是代码片段。
这是我的模型:
class Delivery(models.Model):
delivery_type = models.CharField(max_length=60)
driver_name = models.CharField(max_length=60)
def __str__(self):
return self.delivery_type
class Fruits(models.Model):
name = models.CharField(max_length=250)
status = models.CharField(max_length=250)
delivery = models.ManyToManyField(Delivery, related_name='fruits')
def __str__(self):
return self.name
这是我的序列化器:
class FruitSerializer(serializers.ModelSerializer):
class Meta:
model = Fruits
fields = "__all__"
class DeliverySerializer(serializers.ModelSerializer):
fruits = FruitSerializer(many=True)
class Meta:
model = Delivery
fields = "__all__"
def create(self, validated_data):
delivery = Delivery.objects.create(
delivery_type = validated_data['delivery_type'],
driver_name = validated_data['driver_name']
)
#update the status field in Fruits Table
fruits = validated_data.get('fruits')
for fruit in fruits:
fruit_data = Fruits(
id = fruit['id'],
status = "Not Available",
delivery=delivery
)
fruit_data.save()
return delivery
这是我的看法:
class DeliverySerializerView(APIView):
def post(self, request):
serializer = DeliverySerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
解决方案
您应该更新多对多关系,在您的情况下,您只需创建单独的 Delivery 和许多 Fruits 对象。
fruit_data.save()
尝试后
delivery.fruits.add(fruit_data)
。
有关 many_to_many 的更多信息,请参阅此帖子
如果你想更新相关水果的状态,你可以这样做
delivery.fruits.all().update(status="foo")
推荐阅读
- .net-core - 找不到证书 - Azure .NET Core 应用程序
- c++ - 强制 GCC 将特定语句放在特定部分
- python - Python & API 用户输入
- python - 将列值四舍五入到最接近的 10,然后显示满足条件的每个组的百分比
- java - 无法从 Activity 到 Fragment 获取值,NullPointerException
- html - CSS 不均匀 div 定位
- java - 如何用另一个输出替换控制台中的最后一个输出?
- android-layout - 为什么 Tab Layout 的布局既不能滚动也不适合片段内的屏幕?
- android - SeekBarPreference 在拖动时显示值,而不仅仅是在拖动之后
- excel - VBA - Excel - 使用 IE 抓取网站 - 当用户在等待就绪状态时关闭 IE 应用程序时如何避免永远循环?