Как создать и, если пользователь вышел, просто обновить другие данные в django rest framework
Я хочу создать API в Django rest framework. Задача Highlight будет создавать и когда у одного и того же пользователя будет такой же id книги, то он будет обновлять. Я добавил код ниже. но я не нахожу никакого способа обновить значения без создания новых данных.
models.py
class HighLight(models.Model):
id = models.AutoField(primary_key=True)
book = models.ForeignKey(
BookDetails,
on_delete=models.CASCADE,
related_name='book_highlight'
)
customer = models.ForeignKey('user_profile.CustomerProfile', on_delete=models.CASCADE,null=True,blank=True)
start = models.IntegerField(blank=True, null=True)
end = models.IntegerField(blank=True, null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
Serializer.py
class HighLightSerializer(serializers.Serializer):
class Meta:
model = HighLight
fields = ('id','book','customer','start','end',)
Views.py
class HighLightedBooks(generics.ListCreateAPIView):
permission_classes = (IsAuthenticated,)
serializer_class = HighLightSerializer
authentication_classes = (TokenAuthentication,)
def perform_create(self, serializer):
book_id = self.request.data.get('book', False)
try:
customer = CustomerProfile.objects.get(user=self.request.user)
except Exception as e:
raise ValidationError('You must have to update your profile before submitting a review')
serializer.save(customer_id=customer.id, book_id=book_id)
ListCreateAPIView
общее представление настраивает сериализатор на создание новой записи на save
.
Для обновления HighLight
с помощью дженериков необходимо создать новое представление с UpdateAPIView
и новым URL (например, /path/<int:pk>
).
Вы можете подключиться к perform_update
так, как вы это делаете для perform_create
.