DurumEk Serializer Alanlar Django DİNLENME Çerçeve 3
Ben bir kullanıcı yaratılması için olanak tanıyan basit son nokta oluşturma. Kullanıcı modelimde olmayan bir alana ihtiyacım var (ör. confirm_password
). Bu alanı ve benim modelimde bulunan başka bir alanı karşılaştıran doğrulama işlemini çalıştıracağım ve daha sonra seri hale getiricide ek alanı asla kullanmam.
Sorun
DRF sürüm 3, bunu başarmak için süreci değişti ve ben oldukça dokümantasyon yapmamı öneriyorsunuz ne anlamıyorum. Dokümantasyon için bkz. here. Şöyle bir UserSerializer
yarattık
Çözüm de
Denemesi: Ben validate
içinde confirm_password
haşhaş sorunlarımı özen, ama sadece almak umuyordum
from django.contrib.auth import get_user_model
from rest_framework import serializers
class UserSerializer(serializers.ModelSerializer):
confirm_password = serializers.CharField(allow_blank=False)
def validate(self, data):
"""
Checks to be sure that the received password and confirm_password
fields are exactly the same
"""
if data['password'] != data.pop('confirm_password'):
raise serializers.ValidationError("Passwords do not match")
return data
def create(self, validated_data):
"""
Creates the user if validation succeeds
"""
password = validated_data.pop('password', None)
user = self.Meta.model(**validated_data)
user.set_password(password)
user.save()
return user
class Meta:
# returns the proper auth model
model = get_user_model()
# fields that will be deserialized
fields = ['password', 'confirm_password',
'username', 'first_name', 'last_name', 'email']
# fields that will be serialized only
read_only_fields = ['is_staff', 'is_superuser']
# fields that will be deserialized only
write_only_fields = ['password' 'confirm_password']
izleyen:
KeyError
seri numarasıUserSerializer
numaralı alan için değer. Sana parola onayı görüntülemek istemiyor sanıyorum olarak serileştirici alan bir salt alanında aradığınızOrderedDict
örneği
Sadece bir kafaları yukarı, bu yaygın 'Meta' sınıfı, genellikle aradığınız bilgilerin çoğunu içerdiğinden, serileştiricinin en üstünde yer alır. –
Ah, bu mantıklı. Bunu takdir ediyorum! – nmagerko