![](/img/trans.png)
[英]AttributeError with Django REST Framework and a ManyToMany relationship
[英]Get AttributeError when writing a foreign key relationship in Django Rest Framework
閱讀 DRF 教程后,我嘗試編寫 API 但收到“請求” object 在我向/api/images/
發送發布請求時沒有屬性“客戶”。我只是嘗試復制和修改 DRF 教程中的代碼。 有人可以告訴我出了什么問題嗎? (我確定我的外鍵關系破壞了 api,因為當我評論有關外鍵的代碼時它可以工作。)
(客戶是圖像的外鍵。)
模型.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']
視圖.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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.