Python 在Django Rest框架中编写外键关系时获取AttributeError
在阅读了DRF教程之后,我尝试编写一个API,但是当我向Python 在Django Rest框架中编写外键关系时获取AttributeError,python,django,django-rest-framework,Python,Django,Django Rest Framework,在阅读了DRF教程之后,我尝试编写一个API,但是当我向/API/images/发送post请求时,get'Request'对象没有属性'customer'。我只是尝试复制和修改DRF教程中的代码。有人能告诉我出了什么问题吗? (我确信我的外键关系破坏了api,因为当我对有关外键的代码进行注释时,它会起作用。) (客户是图像的外键。) models.py class Customer(models.Model): first_name = models.CharField(max_len
/API/images/
发送post请求时,get'Request'对象没有属性'customer'。我只是尝试复制和修改DRF教程中的代码。有人能告诉我出了什么问题吗?
(我确信我的外键关系破坏了api,因为当我对有关外键的代码进行注释时,它会起作用。)
(客户是图像的外键。)
models.py
class Customer(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
email = models.EmailField(max_length=100, unique=True)
created_at = models.DateTimeField(auto_now_add=True)
owner = models.ForeignKey('auth.User', related_name='customers', on_delete=models.CASCADE)
class Image(models.Model):
customer = models.ForeignKey(Customer, related_name='images', on_delete=models.CASCADE)
figure = models.ImageField(blank=False, null=False)
序列化程序.py
# User Serializer
class UserSerializer(serializers.HyperlinkedModelSerializer):
customers = serializers.HyperlinkedRelatedField(many=True, view_name='customer-detail', read_only=True)
class Meta:
model = User
fields = ['url', 'id', 'username', 'customers', 'email']
class CustomerSerializer(serializers.HyperlinkedModelSerializer):
images = serializers.HyperlinkedRelatedField(many=True, view_name='image-detail', read_only=True)
owner = serializers.ReadOnlyField(source='owner.username')
class Meta:
model = Customer
fields = ['url', 'id', 'first_name', 'last_name', 'email', 'images', 'owner']
class ImageSerializer(serializers.HyperlinkedModelSerializer):
customer = serializers.ReadOnlyField(source='customer.email')
class Meta:
model = Image
fields = ['url', 'id', 'figure', 'customer']
views.py
class UserView(generics.RetrieveAPIView):
permission_classes = [
permissions.IsAuthenticated,
]
serializer_class = UserSerializer
def get_object(self):
return self.request.user
class CustomerViewSet(viewsets.ModelViewSet):
"""
This viewset automatically provides `list`, `create`, `retrieve`,
`update` and `destroy` actions.
"""
queryset = Customer.objects.all()
serializer_class = CustomerSerializer
permission_classes = [permissions.IsAuthenticatedOrReadOnly,
IsOwnerOrReadOnly]
def perform_create(self, serializer):
"""
The create() method of our serializer will now be passed an additional 'owner' field,
along with the validated data from the request.
"""
serializer.save(owner=self.request.user)
class ImageViewSet(viewsets.ModelViewSet):
"""
This viewset automatically provides `list`, `create`, `retrieve`,
`update` and `destroy` actions.
"""
parser_class = (FileUploadParser, )
queryset = Image.objects.all()
serializer_class = ImageSerializer
# permission_classes = [permissions.IsAuthenticatedOrReadOnly,
# IsOwnerOrReadOnly]
def perform_create(self, serializer):
serializer.save(customer=self.request.customer)
您应该使用
self.request.user
在Django中获取经过身份验证的用户,而不是self.request.customer
。因为DRF请求没有任何名为customer
的属性,而是user
。所以应该是,
def perform_create(self, serializer):
serializer.save(customer=self.request.user)
def perform_create(自、序列化程序):
serializer.save(customer=self.request.user)