BattOS
Hectopat
- Katılım
- 21 Eylül 2019
- Mesajlar
- 88
Daha fazla
- Cinsiyet
- Erkek
Merhaba.
Temmuzda staja başlayacağım ve staj yapacağım şirket backend de Django Rest Framework kullanıyor bu yüzden DRF öğreniyorum ama aldığım bir hatayı çözemedim. Update yapmaya çalıştığımda bütün alanların gönderilmesini istiyor şu anda API ama ben sadece güncellemek istediğim alanları göndermek istiyorum.
Serializer:
View classda put methodu:
Aldığım hata:
Nasıl düzeltebilirim? Cevaplar için şimdiden teşekkürler.
Henüz cevap gelmedi ama ben sorunu sonunda çözdüm, birkaç şey denedim olmadı çok uzatmayacağım. Serializer'a title ve description'a
ekledim. Böylece create işleminde title gönderilmemişse hata verip oluşturmuyor ama update ederken hata vermiyor. Ayrıca gönderirken
Temmuzda staja başlayacağım ve staj yapacağım şirket backend de Django Rest Framework kullanıyor bu yüzden DRF öğreniyorum ama aldığım bir hatayı çözemedim. Update yapmaya çalıştığımda bütün alanların gönderilmesini istiyor şu anda API ama ben sadece güncellemek istediğim alanları göndermek istiyorum.
Serializer:
Python:
class TodoSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
title = serializers.CharField(allow_blank=False, max_length=64)
description = serializers.CharField(allow_blank=False, max_length=256)
done = serializers.BooleanField(default=False)
owner = serializers.PrimaryKeyRelatedField(many=False, queryset=User.objects.all(), required=False)
def create(self, validated_data):
return models.Todo.objects.create(**validated_data)
def update(self, instance, validated_data):
instance.title = validated_data.get('title', instance.title)
instance.description = validated_data.get('description', instance.description)
instance.done = validated_data.get('done', instance.done)
instance.save()
return instance
View classda put methodu:
Python:
def put(self, request, pk):
todo = self.getTodo(pk)
if todo.owner != request.user:
return Response(status=status.HTTP_403_FORBIDDEN)
serializer = TodoSerializer(todo, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Aldığım hata:
Nasıl düzeltebilirim? Cevaplar için şimdiden teşekkürler.
Henüz cevap gelmedi ama ben sorunu sonunda çözdüm, birkaç şey denedim olmadı çok uzatmayacağım. Serializer'a title ve description'a
required=False
ekledim. Böyle yapınca oluştururken başlık boş olabiliyordu ama bunu istemediğim için biraz düşündükten sonra Serializer'da create methoduna
Python:
if validated_data.get("title") == None:
raise serializers.ValidationError("Title is required on create")
title=""
olarak gönderilmesin diye Serializer'da title'a min_length=4
ekledim.
Son düzenleyen: Moderatör: