Additional Serializer Fields in Django REST Framework 3

后端 未结 2 1265
庸人自扰
庸人自扰 2020-12-31 04:37

Situation

I am creating a simple endpoint that allows for the creation of a user. I need a field that is not in my user model (i.e., confirm_p

2条回答
  •  北荒
    北荒 (楼主)
    2020-12-31 05:06

    Also useful for nested serializer implementation representing models, when the root model doesn't have directly access to fields you want to use. Thank you @vyscond ;) Fyi here is my case:

    models.py

    class Company(models.Model):
        permission_classes = (
            IsCompanyMember,
        )
    
        name = models.CharField(
            unique=True,
            max_length=100,
            verbose_name='company name',
            null=False
        )
    class Profile(models.Model):
    
        company = models.ForeignKey(Company, on_delete=models.CASCADE, null=True)
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        is_company_admin = models.BooleanField(default=False, null=False)
        is_email_validated = models.BooleanField(default=False, null=False)
        is_approved_by_company_admin = models.BooleanField(default=False, null=False)
    

    serializer.py

    class CompanySerializer(serializers.ModelSerializer):
        class Meta:
            model = Company
            fields = ('name',)
    
    class CustomUserRegistrationSerializer(serializers.ModelSerializer):
        password = serializers.CharField(style={'input_type': 'password'},
                                     write_only=True,
                                     validators=settings.get('PASSWORD_VALIDATORS'))
    
        company = CompanySerializer(allow_null=False, required=True,write_only=True)
    
        class Meta:
            model = User
            fields = ('username',
                      'email',
                      'password',
                      'company',
                      'first_name',
                      'last_name')
    

提交回复
热议问题