【问题标题】:Write operation in Reverse Relationship Django Rest Framework反向关系 Django Rest Framework 中的写入操作
【发布时间】:2014-09-25 00:48:40
【问题描述】:

我有这样的模型:

class Car(models.Model):
    name = models.CharField(max_length=255)


class CarImage(models.Model):
    car = models.ForeignKey(Car, related_name='photos')
    photo = models.ImageField(upload_to='car/')

对于我拥有的序列化程序:

class CarImageSerializer(serializer.ModelSerializer):
    class Meta:
        model = CarImage

class CarSerializer(serializer.ModelSerializer):
    photos = CarImageSerializer()
    class Meta:
        model = Car
        fields = ('id', 'name', 'photos',)

CarSerializer 的网络界面加载时,我默认在photos 字段上得到non_field_errors。 DRF支持这种东西吗?如果不是,最好的方法是什么? P.S 我使用的是通用的CreateAPIView

【问题讨论】:

  • 如果您找到/找到答案,请告诉我,我即将发布类似问题。再次尝试 POST 到通过反向关系链接的模型。
  • 还没找到答案!
  • 您确定要使用CreateAPIView吗?它只能根据post 创建新条目。如果您还想显示每个 get 的条目,您应该使用 ListCreateAPIView?
  • 您的序列化程序类中有一个错误的拼写错误:serializer.ModelSerializer。它必须是serializers.ModelSerializer。你肯定有这个:from rest_framework import serializers.

标签: django django-rest-framework


【解决方案1】:

使用docs,您应该以另一种方式执行此操作:

class CarSerializer(serializer.ModelSerializer):
    photos = serializers.RelatedField(many=True)
    class Meta:
        model = Car
        fields = ('id', 'name', 'photos',)

【讨论】:

  • 如果我这样做,我在 Web 界面上看不到照片字段。另外,反向关系插入是否由通用 API 视图处理?
【解决方案2】:

也许你可以试试这个:

serializers.py

class CarImageSerializer(serializers.ModelSerializer):

    class Meta:
        model = CarImage


class CarSerializer(serializers.HyperlinkedModelSerializer):
    photos = serializers.HyperlinkedRelatedField(many=True,
                                                 view_name='carimage-list')

    class Meta:
        model = Car
        fields = ('id', 'name', 'photos',)

views.py

class CarImageList(ListCreateAPIView):
    queryset = CarImage.objects.all()
    serializer_class = CarImageSerializer


class CarList(ListCreateAPIView):
    queryset = Car.objects.all()
    serializer_class = CarSerializer

urls.py

url(r'^carimage/$', CarImageList.as_view(), name='carimage-list'),
url(r'^car/$', CarList.as_view(), name='car-list'),

您应该注意所有需要的导入。不能保证,但你可以试一试。

【讨论】:

    猜你喜欢
    • 2012-12-25
    • 1970-01-01
    • 2018-08-04
    • 2015-12-14
    • 2013-10-20
    • 2014-03-21
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多