Unexpected keyword argument TypeError with Django REST Framework

Question:

I get this strange error on DRF 3.1:

__init__() got an unexpected keyword argument 'allow_blank'

I think it comes from my serializers.py file, but I don’t know why.

Here’s my code

models.py

from django.db import models

# Create your models here.

class Expediteur(models.Model):
    nom = models.CharField(max_length=50)
    prenom = models.CharField(max_length=100)
    adresse = models.CharField(max_length=200)
    tel = models.IntegerField()

class Destinataire(models.Model):
    nom = models.CharField(max_length=50)
    prenom = models.CharField(max_length=100)
    adresse = models.CharField(max_length=200)
    tel= models.IntegerField()

class LettrePrio(models.Model):
    expediteur = models.ForeignKey(Expediteur)
    destinataire = models.ForeignKey(Destinataire)
    prix = models.FloatField('0,76')

class TypeLettreReco(models.Model):
    R1 = models.FloatField('4,72')
    R2 = models.FloatField('5,40')
    R3 = models.FloatField('6,40')

class LettreReco(models.Model):
    expediteur = models.ForeignKey(Expediteur)
    destinataire = models.ForeignKey(Destinataire)
    prix = models.ForeignKey(TypeLettreReco)

class TimbrePrio(models.Model):
    expediteur = models.ForeignKey(Expediteur)
    destinataire = models.ForeignKey(Destinataire)
    lettre = models.ForeignKey(LettrePrio)

class TimbreReco(models.Model):
    expediteur = models.ForeignKey(Expediteur)
    destinataire = models.ForeignKey(Destinataire)
    lettre = models.ForeignKey(LettreReco)

serializers.py

from rest_framework import serializers
from polls.models import Expediteur, Destinataire, LettrePrio, TypeLettreReco, LettreReco, TimbrePrio, TimbreReco


class ExpediteurSerializer(serializers.Serializer):
    nom = serializers.CharField(required=True, allow_blank=False, max_length=50)
    prenom = serializers.CharField(required=True, allow_blank=False, max_length=100)
    adresse = serializers.CharField(required=True, allow_blank=False, max_length=200)
    tel = serializers.IntegerField(required=True, allow_blank=False,)
    
    def create(self, validated_data):
        return Expediteur.objects.create(**validated_data)
    def update(self, instance, validated_data):
        instance.nom = validated_data.get('nom', instance.nom)
        instance.prenom = validated_data.get('prenom', instance.prenom)
        instance.adresse = validated_data.get('adresse', insatnce.adresse)
        instance.tel = validated_data.get('tel', instance.tel)
        instance.save()
        return instance

class DestinataireSerializer(serializers.Serializer):
    nom = serializers.CharField(required=True, allow_blank=False, max_length=50)
    prenom = serializers.CharField(required=True, allow_blank=False, max_length=100)
    adresse = serializers.CharField(required=True, allow_blank=False, max_length=200)
    tel = serializers.IntegerField(required=True, allow_blank=False,)

    def create(self, validated_data):
        return Destinataire.objects.create(**validated_data)
    def update(self, instance, validated_data):
        instance.nom = validated_data.get('nom', instance.nom)
        instance.prenom = validated_data.get('prenom', instance.prenom)
        instance.adresse = validated_data.get('adresse', insatnce.adresse)
        instance.tel = validated_data.get('tel', instance.tel)
        instance.save()
        return instance

class LettrePrioSerializer(serializers.Serializer):
    expediteur = serializers.ForeignKey(ExpediteurSerializer)
    destinataire = serializers.ForeignKey(DestinataireSerializer)
    prix = serializers.FloatField(default='0,76')

    def create(self, validated_data):
        return LettrePrio.objects.create(**validated_data)
    def update(self, instance, validated_data):
        instance.expediteur = validated_data.get('expediteur', instance.expediteur)
        instance.destinataire = validated_data.get('destinataire', instance.destinataire)
        instance.prix = validated_data.get('prix', instance.prix)
        instance.save()
        return instance

class TypeLettreRecoSerializer(serializers.Serializer):
    R1 = serializers.FloatField(default='4,72')
    R2 = serializers.FloatField(default='5,40')
    R3 = serializers.FloatField(default='6,40')
    
    def create(self, validated_data):
        return TypeLettreReco.objects.create(**validated_data)
    def update(self, instance, validated_data):
        instance.R1 = validated_data.get('R1', instance.R1)
        instance.R2 = validated_data.get('R2', instance.R2)
        instance.R3 = validated_data.get('R3', instance.R2)
        instance.save()
        return instance

class LettreRecoSerializer(serializers.Serializer):
    expediteur = serializers.ForeignKey(ExpediteurSerializer)
    destinataire = serializers.ForeignKey(DestinataireSerializer)
    prix = serializers.ForeignKey(TypeLettreRecoSerializer)

    def create(self, validated_data):
        return LettreReco.objects.create(**validated_data)
    def update(self, instance, validated_data):
        instance.expediteur = validated_data.get('expediteur', instance.expediteur)
        instance.destinataire = validated_data.get('destinataire', instance.destinataire)
        instance.prix = validated_data.get('prix', instance.prix)
        instance.save()
        return instance

class TimbrePrioSerializer(serializers.Serializer):
    expediteur = serializers.ForeignKey(ExpediteurSerializer)
    destinataire = serializers.ForeignKey(DestinataireSerializer)
    lettre = serializers.ForeignKey(LettrePrioSerializer)

    def create(self, validated_data):
        return TimbrePrio.objects.create(**validated_data)
    def update(self, instance, validated_data):
        instance.expediteur = validated_data.get('expediteur', instance.expediteur)
        instance.destinataire = validated_data.get('destinataire', instance.destinataire)
        instance.lettre = validated_data.get('lettre', instance.lettre)
        instance.save()
        return instance

class TimbreRecoSerializer(serializers.Serializer):
    expediteur = serializers.ForeignKey(ExpediteurSerializer)
    destinataire = serializers.ForeignKey(DestinataireSerializer)
    lettre = serializers.ForeignKey(LettreRecoSerializer)

    def create(self, validated_data):
        return TimbreReco.objects.create(**validated_data)
    def update(self, instance, validated_data):
        instance.expediteur = validated_data.get('expediteur', instance.expediteur)
        instance.destinataire = validated_data.get('destinataire', instance.destinataire)
        instance.lettre = validated_data.get('lettre', instance.lettre)
        instance.save()
        return instance

views.py

from django.shortcuts import render
from rest_framework import viewsets
from polls.serializers import ExpediteurSerializer, DestinataireSerializer, LettrePrioSerializer, TypeLettreRecoSerializer, LettreRecoSerializer, TimbrePrioSerializer, TimbreRecoSerializer

# Create your views here.

class ExpeViewSet(viewsets.ModelViewSet):
    queryset = Expediteur.objects.all()
    serializer_class = ExpediteurSerializer

class DestiViewSet(viewsets.ModelViewSet):
    queryset = Destinataire.objects.all()
    serializer_class = DestinataireSerializer

class LetPrioViewSet(viewsets.ModelViewSet):
    queryset = LettrePrio.objects.all()
    serializer_class = LettrePrioSerializer

class TypLetRecoViewSet(viewsets.ModelViewSet):
    queryset = TypeLettreReco.objects.all()
    serializer_class = TypeLettreRecoSerializer

class LetRecoViewSet(viewsets.ModelViewSet):
    queryset = LettreReco.objects.all()
    serializer_class = LettreRecoSerializer

class TimbrePrioViewSet(viewsets.ModelViewSet):
    queryset = TimbrePrio.objects.all()
    serializer_class = TimbrePrioSerializer

class TimbreRecoViewSet(viewsets.ModelViewSet):
    queryset = TimbreReco.objects.all()
    serializer_class = TimbreRecoSerializer

It’s my first DRF project so I wouldn’t be surprised if the error came from something I didn’t understand in using DRF.

Asked By: Mehdi

||

Answers:

tel = serializers.IntegerField(required=True, allow_blank=False,)

IntegerField doesn’t accept allow_blank.

Answered By: Laura M