首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django rest_framework在CreateAPIView中选择foreignKey模型

django rest_framework在CreateAPIView中选择foreignKey模型
EN

Stack Overflow用户
提问于 2018-04-24 13:42:20
回答 1查看 319关注 0票数 0

我希望使用ServiceArea django rest框架来创建新的实例,但不知道如何在CreateApiView中设置supplier foreignKey字段。我试图使用PrimaryKeyRelatedField来实现它,但是当我将queryset属性设置为Supplier.objects.all()时,它会给出错误'ServiceArea' object has no attribute 'suppliers'。我怎样才能在CreateApiView中访问CreateApiView?我的代码:

models.py

代码语言:javascript
复制
class Supplier(models.Model):
    title = models.CharField('Название', max_length=60)
    email = models.EmailField(verbose_name='Почта')
    phone_number = models.CharField('Номер телефона', max_length=15)
    address = models.CharField('Адрес центрального офиса', max_length=120)

    class Meta:
        verbose_name = 'Поставщик'
        verbose_name_plural = 'Поставщики'

    def __str__(self):
        return self.title


class ServiceArea(models.Model):
    title = models.CharField('Название области', max_length=120)
    poly = geo_models.PolygonField('Область', null=True)
    supplier = models.ForeignKey(Supplier, related_name='areas', on_delete=models.CASCADE, null=True)

    class Meta:
        verbose_name = 'Сервисная зона'
        verbose_name_plural = 'Сервисные зоны'

    def __str__(self):
        return self.title

serializers.py

代码语言:javascript
复制
class SupplierSerializer(ModelSerializer):
    class Meta:
        model = Supplier
        fields = [
            'id',
       ]

class ServiceAreaSerializer(GeoFeatureModelSerializer):
    suppliers = PrimaryKeyRelatedField(many=True, queryset=Supplier.objects.all())

    class Meta:
        model = ServiceArea
        geo_field = 'poly'
        fields = [
            'id',
            'title',
            'suppliers',
        ]

views.py

代码语言:javascript
复制
class ServiceAreaListApiView(ListAPIView, CreateAPIView):
    queryset = ServiceArea.objects.all()
    serializer_class = ServiceAreaSerializer
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-24 14:01:40

ServiceAreaSerializer序列化程序中,属性名应该是supplier,而不是suppliers,因为在模型中的ServiceArea类中,属性是包含外键的supplier。模型和序列化程序中的字段必须匹配。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50003227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档