Django Rest Framework - отношения один ко многим не работают - PullRequest
0 голосов
/ 21 сентября 2018


Я пытаюсь сериализовать объект, имеющий много связанных объектов.Это Орден имеет много журналов отношений.Я пытался сделать то же самое, что и в этих уроках (https://docs.djangoproject.com/en/2.1/topics/db/examples/many_to_one/ и http://www.django -rest-framework.org / api-guide / Relations / # nested-Relations ), но это не такРабота.Я также посмотрел в различных ссылках Google, но ничего.Кто-нибудь может мне помочь, пожалуйста?Что я делаю не так?

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

1 Ответ

0 голосов
/ 21 сентября 2018

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 атрибуты.

...