AttributeError-对象没有属性“创建” [英] AttributeError - object has no attribute 'create'

查看:79
本文介绍了AttributeError-对象没有属性“创建”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to save a through model which has the following attributes via Django-rest-framework

在发送POST时(我试图创建一个新实例),则出现以下错误:

when sending a POST (I'm trying to create a new instance), I get the following error:


/ api / organisation / provider /
的EnabledExternalProvider对象具有没有属性'create'

AttributeError at /api/organisation/provider/ 'EnabledExternalProvider' object has no attribute '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}


推荐答案

您的视图没有该方法,因为您尚未定义该方法,或从具有该方法的类中继承了该方法;

Your view doesn't have that method because you haven't defined it, or inherited from a class that has it; your mixins provide retrieve and update, but not create.

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

You could add mixins.CreateModelMixin to the inheritance, but at this point you should really be using a ViewSet instead.

这篇关于AttributeError-对象没有属性“创建”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆