【问题标题】:Django Rest Framework - One to Many relationship not workingDjango Rest Framework - 一对多关系不起作用
【发布时间】:2019-02-26 02:45:26
【问题描述】:


我正在尝试序列化与许多对象相关的对象。这是一个具有许多日志关系的订单。我尝试在这些教程(https://docs.djangoproject.com/en/2.1/topics/db/examples/many_to_one/http://www.django-rest-framework.org/api-guide/relations/#nested-relationships)中做同样的事情,但它不起作用。我也查看了各种谷歌链接,但没有。任何人都可以帮助我,好吗?我做错了什么?

models.py

class MaintenanceOrder(models.Model):
    responsible_technician = models.ForeignKey(Technician, on_delete=models.DO_NOTHING, null=True)

    order_code = models.CharField(max_length=12, null=True)
    note_code = models.CharField(max_length=12, null=True)
    equipment = models.CharField(max_length=18, null=True)
    locale = models.CharField(max_length=30, null=True)
    short_description = models.CharField(max_length=40, null=False)
    description = models.TextField(null=True)
    priority = models.CharField(max_length=1, null=False)
    breakdown = models.CharField(max_length=1, null=True)
    stop_time = models.DateTimeField(null=True)
    end_time = models.DateTimeField(null=True)

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    status = models.ForeignKey(MaintenanceStatus, on_delete=models.DO_NOTHING)

    def __str__(self):
        return self.order_code

    class Meta:
        managed = True


class MaintenanceLog(models.Model):
    maintenance_order = models.ForeignKey(MaintenanceOrder, on_delete=models.DO_NOTHING)
    technician = models.ForeignKey(Technician, on_delete=models.DO_NOTHING, blank=True, null=True)

    start_time = models.DateTimeField()
    stop_time = models.DateTimeField(null=True)

    description = models.TextField(null=True)

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.description

    class Meta:
        managed = True

serializers.py

class MaintenanceLogSerializer(serializers.ModelSerializer):
    class Meta:
        model = MaintenanceLog
        fields = '__all__'


class MaintenanceOrderSerializer(serializers.ModelSerializer):
    status_code = serializers.IntegerField(source='status.status_code', read_only=True)
    order_log = MaintenanceLogSerializer(many=True, read_only=True)

    class Meta:
        model = MaintenanceOrder
        fields = '__all__'

这个API返回所有订单,但是没有“order_log”...即使我在字段中指定“order_log”,它也不返回...是的,数据库中有相关数据。

其他信息
Python:3.5
Django:2.1

【问题讨论】:

    标签: python django api serialization django-rest-framework


    【解决方案1】:

    order_log 不是 MaintenanceOrder 模型的正确字段。

    您需要指定 order_log 的来源。在这种情况下,它是maintenancenlog_set。

    这样做:

    class MaintenanceOrderSerializer(serializers.ModelSerializer):
        status_code = serializers.IntegerField(source='status.status_code', read_only=True)
        order_log = MaintenanceLogSerializer(source='maintenancelog_set', many=True, read_only=True)
    
        class Meta:
            model = MaintenanceOrder
            fields = ( 'order_log', )
    

    您需要在字段中明确指定它。包括所有其他 MaintenanceOrder 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-15
      • 2019-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 2021-09-01
      相关资源
      最近更新 更多