【发布时间】:2021-08-08 15:38:37
【问题描述】:
我有这 2 个模型:Route 和 Order。如您所见,Route 与 Order 有关系 oneToMany:
class Order(models.Model):
customer = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='customer')
retailer = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='retailer')
date_publish = models.DateField(default=datetime.date.today)
date_available = models.DateField()
weight = models.DecimalField(decimal_places=2, max_digits=5)
description = models.CharField(max_length=500, null=True)
route = models.ForeignKey(Route, related_name='orders', null=True, on_delete=models.CASCADE)
class Route(models.Model):
day = models.DateField()
warehouse = models.ForeignKey(Warehouse, on_delete=models.CASCADE)
start_time = models.TimeField()
创建订单时,其路线应为空。创建路由时,我想将订单与创建的路由相关联,因此我有以下 Route Serializer。
class routeSerializer(serializers.ModelSerializer):
orders = serializers.ListField()
class Meta:
model = Route
fields = ['day', 'warehouse', 'start_time', 'orders']
def create(self, validated_data):
keys_to_extract = ['day', 'warehouse', 'start_time']
route_subset = {key: validated_data[key] for key in keys_to_extract}
print(validated_data)
route = Route.objects.create(**route_subset)
for order_data in validated_data['orders']:
Order.objects.filter(id=order_data).update(route=route)
return route
请求的正文应该是这样的:
{
"day" : "2021-12-12",
"warehouse": "1",
"start_time": "7:00",
"orders": [
1,2,3,4,5,6,7
]
}
我以不同的方式执行此操作,但有人告诉我以这种方式执行此操作,但使用 orders = serializers.PrimaryKeyRelatedField()。但是这样我就不能从validated_data中得到'orders',因为它只带有'day'、'warehouse'和'start_time',所以我尝试使用serializers.ListField()。现在validated_data 具有Orders 主键列表,并且Order.objects.filter(id=order_data).update(route=route) 更新了orders 实例,但我收到错误TypeError: 'RelatedManager' object is not iterable
当我创建路线和尝试列出路线时。
【问题讨论】:
标签: python django django-rest-framework