扩展用户Django休息框架

时间:2017-10-29 12:22:30

标签: django django-rest-framework django-users

我想在django中创建一个自定义用户,但我有很多问题。这里是mi代码:

models.py

class Profesionales(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    dni = models.CharField(max_length=9)
    numColegiado = models.CharField(max_length=8)
    valoracionMedia = models.FloatField()
    numVotos = models.IntegerField()

    def __str__(self):
        return self.numColegiado, self.user.first_name

Serializers.py

class ProfesionalesSerializer(serializers.ModelSerializer):

    class Meta:
        model = Profesionales
        fields = ('numColegiado')

class UserSerializer(serializers.ModelSerializer):

    profesionales = ProfesionalesSerializer

    class Meta:
        model = User
        fields = (
            'id', 'username', 'email', 'first_name', 'last_name', 'password', 'profesionales'
        )

    def create(self, validated_data):
        profesional_data = validated_data.pop('profesionales')
        user = User.objects.create(**validated_data)
        Profesionales.objects.create(**profesional_data)
        return user

views.py

#Listar todos los profesionales o crear uno
#profesionales/
class ProfesionalesList(APIView):
    def get(self, request ):
        profesionales = User.objects.all()
        profesionalSerializer = UserSerializer(profesionales, many=True)
        return Response(profesionalSerializer.data)

    def post(self, request):
        profesionalSerializer = UserSerializer(data=request.data)
        if profesionalSerializer.is_valid():
            profesionalSerializer.save()
            return Response(profesionalSerializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(profesionalSerializer.errors, status=status.HTTP_400_BAD_REQUEST)

错误:

OperationalError at /profesionales/
no such column: profesionales_profesionales.user_id

Request Method: GET
Request URL: http://127.0.0.1:8000/profesionales/
Django Version: 1.11.6

1 个答案:

答案 0 :(得分:1)

 Profesionales.objects.create(user=user, **profesional_data)