Django Rest - 不能序列化项目

时间:2017-06-27 04:05:51

标签: django django-rest-framework

我正在尝试序列化嵌套关系,但在创建模型期间因请求而出错:'MeasureUnit' object has no attribute 'unit'

我做错了什么?我只是想创建模型MeasureItem,但不知何故在MeasureUnit中出错。

我的模特:

from django.db import models
from measure_unit.models import MeasureUnit
from main_user.models import MainUser

class Item(models.Model):
    code = models.CharField(unique=True, max_length=15)
    current_code = models.CharField(blank=True, null=True, max_length=15)

    title = models.CharField(default='', max_length=100)
    description = models.TextField(blank=True, null=True)

    measure_units = models.ManyToManyField(MeasureUnit, through='MeasureItem', through_fields=('item', 'unit'), blank=True)

    class Meta:
        ordering = ('created_at',)

class MeasureItem(models.Model):
    item = models.ForeignKey(Item, on_delete=models.CASCADE, blank=True, null=True)
    unit = models.ForeignKey(MeasureUnit, on_delete=models.CASCADE, blank=True, null=True)
    quantity = models.IntegerField(default=0)

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

    class Meta:
        ordering = ('created_at',)

我的序列化器:

from rest_framework import serializers
from .models import Item, MeasureItem

class MeasureUnitSerializer(serializers.ModelSerializer):

    class Meta:
        model = MeasureItem
        fields = ('id', 'unit')

class ItemAdminSerializer(serializers.ModelSerializer):

    measure_units = MeasureUnitSerializer(many=True)

    class Meta:
        model = Item
        fields = ('id', 'code', 'current_code', 'title', 'description', 'measure_units')

    def create(self, validated_data):
        units_data = validated_data.pop('measure_units')
        item = Item.objects.create(**validated_data)

        for unit_data in units_data:
            try:
                measure_unit = unit_data['unit']
                MeasureItem.objects.create(unit=measure_unit, item=item)
            except Exception as e:
                print(str(e))
                return item
        return item

1 个答案:

答案 0 :(得分:1)

MeasureUnitSerializerMeasureItem模型的ModelSerializer,但您将其用于MeasureUnit中的ItemAdminSerializer模型:

measure_units = MeasureUnitSerializer(many=True)

由于MeasureUnit没有unit字段,因此您会看到错误。 您可以尝试指定source字段的measure_units参数:

measure_units = MeasureUnitSerializer(source='measureitem_set', many=True)