Python 如何在django中为json响应定义嵌套列表
我是Django的新手,所以我想创建一个代表航运公司运营的基本应用程序。我有一份包含货物的工作单。因此,my models.py包含以下内容:Python 如何在django中为json响应定义嵌套列表,python,django,django-models,django-rest-framework,django-serializer,Python,Django,Django Models,Django Rest Framework,Django Serializer,我是Django的新手,所以我想创建一个代表航运公司运营的基本应用程序。我有一份包含货物的工作单。因此,my models.py包含以下内容: class WorkOrder (models.Model): status = models.CharField(max_length=300,default = "New") source = models.CharField(max_length=300) destination = models.CharField(max
class WorkOrder (models.Model):
status = models.CharField(max_length=300,default = "New")
source = models.CharField(max_length=300)
destination = models.CharField(max_length=
material = models.CharField(max_length=300)
shipmentlist = [] //PROBLEMATIC CODE
class Shipment (models.Model):
expected_startDate = models.DateTimeField(default=timezone.now)
expected_endDate = models.DateTimeField(default=timezone.now)
shipment_status = models.CharField(max_length=300,default = "Not Started")
我在serializers.py中定义了两个序列化程序WorkOrderSerializer和ShipmentSerializer。我想返回包含在工单对象中的装运列表
class WorkOrderSerializer
generated_date = models.DateTimeField(default=timezone.now)
status = models.CharField(max_length=300, default="New")
source = models.CharField(max_length=300)
destination = models.CharField(max_length=300)
material = models.CharField(max_length=300)
shipmentlist = ShipmentSerializer(many=True)
class ShipmentSerializer
expected_startDate = models.DateTimeField(default=timezone.now)
expected_endDate = models.DateTimeField(default=timezone.now)
shipment_status = models.CharField(max_length=300, default="Not Started")
我遵循这里指定的模型。
在my views.py中,当我收到这样的请求时,我正在调用序列化程序
def workorder_operations(request,workorder_pk):
workorder = Work_Order.objects.filter(pk=workorder_pk)
serializer = Work_Order_Serializer(workorder)
这将生成一个json,如下所示
{
"shipmentlist":[]
}
我对两件事完全感到困惑:
class ShipmentSerializer(serializers.ModelSerializer):
class Meta:
model = Shipment
fields =('expected_startDate','expected_endDate','shipment_status')
class WorkOrderSerializer(serializers.ModelSerializer):
class Meta:
model = WorkOrder
fields =('request_id','generated_date','status', 'source','destination','material')
我想知道的是如何表示对象的嵌套列表,以便可以正确地序列化它们。
我希望WorkOrder对象的json看起来像这样:(注意:json和模型中的变量名可能不匹配,因此请忽略这一点,因为我已经剥离了一些变量,以避免使示例复杂化。)
在
WorkOrder
模型中添加ManyToManyField
class Shipment (models.Model):
expected_startDate = models.DateTimeField(default=timezone.now)
expected_endDate = models.DateTimeField(default=timezone.now)
shipment_status = models.CharField(max_length=300,default = "Not Started")
class WorkOrder (models.Model):
status = models.CharField(max_length=300,default = "New")
source = models.CharField(max_length=300)
destination = models.CharField(max_length=
material = models.CharField(max_length=300)
shipments = models.ManyToManyField(Shipment, related_name='shipments')
序列化程序会是这样的
class ShipmentSerializer(serializers.ModelSerializer):
class Meta:
model = Shipment
fields = [f.name for f in model._meta.fields]
class WorkOrderSerializer(serializers.ModelSerializer):
shipments = ShipmentSerializer(many=True)
class Meta:
model = WorkOrder
fields = [f.name for f in model._meta.fields] + ['shipments']
我尝试了你的建议,当我尝试点击URL时,我得到了以下错误:没有这样的表:workorder\u发货。我的数据库当前没有任何发货,因此我希望它显示一个空的发货列表,其中包含工单的其余数据。另外一点是,我在workorder的数据库中输入了部分内容,其中我没有输入任何装运数据。我必须这么做吗?只是确保我没有在你认为不会出错的地方出错:)你迁移了数据库吗?该死!那是丢失的一环!非常感谢您的帮助!:-)
class ShipmentSerializer(serializers.ModelSerializer):
class Meta:
model = Shipment
fields = [f.name for f in model._meta.fields]
class WorkOrderSerializer(serializers.ModelSerializer):
shipments = ShipmentSerializer(many=True)
class Meta:
model = WorkOrder
fields = [f.name for f in model._meta.fields] + ['shipments']