【问题标题】:AttributeError - object has no attribute 'create'AttributeError - 对象没有属性“创建”
【发布时间】:2017-06-23 19:18:58
【问题描述】:

我正在尝试通过 Django-rest-framework 保存具有以下属性的直通模型

发送 POST 时(我正在尝试创建一个新实例),我收到以下错误:

AttributeError at /api/organisation/provider/ “EnabledExternalProvider”对象没有“create”属性

关于我做错了什么有什么想法吗?

有问题的直通模型是:

class EnabledExternalProvider(models.Model):
    provider = models.ForeignKey(ExternalProvider, related_name='associatedProvider')
    organisation = models.ForeignKey(Organisation, related_name='associatedOrg')
    enabled = models.BooleanField(default=True)
    tenantIdentifier = models.CharField('Tenant identifer for organisation', max_length = 128, null=True, blank=True)
    def __str__(self):
        return self.provider + '-' + self.organisation

我的看法是:

class EnabledExternalProvider(mixins.RetrieveModelMixin, mixins.UpdateModelMixin,generics.GenericAPIView):
    serializer_class = ConnectedServiceSerializer

def get_queryset(self):
    return EnabledExternalProvider.objects.filter(organisation=self.request.user.organisation_id)

def get_object(self):
    queryset = self.filter_queryset(self.get_queryset())
    # make sure to catch 404's below
    obj = queryset.get(organisation=self.request.user.organisation_id)
    self.check_object_permissions(self.request, obj)
    return obj

def get(self, request, *args, **kwargs):
    return self.retrieve(request, *args, **kwargs)

def post(self, request, *args, **kwargs):
    return self.create(request, *args, **kwargs)

我的序列化器是:

class ConnectedServiceSerializer(serializers.ModelSerializer):
    provider=ExternalProviderSerializer(read_only=True)
    organisation=OrganisationDetailSerializer(read_only=True)
    class Meta:
        model = EnabledExternalProvider
        fields = ( 'organisation', 'enabled', 'tenantIdentifier')
        read_only_fields = ('organisation', 'provider')

我正在发布以下内容:

{"provider":"1","tenantIdentifier":"9f0e40fe-3d6d-4172-9015-4298684a9ad2","enabled":true}

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    您的视图没有该方法,因为您没有定义它,或者从具有它的类继承;您的 mixin 提供检索和更新,但不提供创建。

    您可以将mixins.CreateModelMixin 添加到继承中,但此时您实际上应该使用ViewSet

    【讨论】:

    • 感谢丹尼尔。就是这样。我也会看看 ViewSets。
    猜你喜欢
    • 2017-09-02
    • 2012-12-01
    • 2021-04-19
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多