Python 在Django Rest框架中编写外键关系时获取AttributeError

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

在阅读了DRF教程之后,我尝试编写一个API,但是当我向
/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)