Django рамки отдыха Оставить заявку - PullRequest
0 голосов
/ 04 апреля 2020

Я создаю django + приложение реакции и хочу передать данные по django остальным фреймворкам.

models.py

class User(AbstractUser):

    def __str__(self):
        return self.username
class Address(models.Model):
    username = models.ForeignKey(User,related_name='address',on_delete=models.CASCADE)
    street_address = models.CharField(max_length=100)
    apartment_address = models.CharField(max_length=100)
    country = CountryField(multiple=False)
    address_type = models.CharField(max_length=1, choices=ADDRESS_CHOICES)
    default = models.BooleanField(default=False)
    class Meta:
        verbose_name_plural = 'Addresses'

    def __str__(self):
        return '%s %s %s %s' % (self.street_address, self.apartment_address, self.country, self.address_type)

serializers.py

class AddressSerializer(serializers.ModelSerializer):

    class Meta:
        model = Address
        fields = ('street_address','apartment_address','country')
class UserSerializer(serializers.ModelSerializer):
    address = serializers.StringRelatedField(many=True)
    class Meta:
        model= User
        fields = ('email','username','password','address')``` 


views.py

class UserViewSet(viewsets.ModelViewSet):
    serializer_class=UserSerializer
    queryset = User.objects.all()

class AddressViewSet(APIView):


    def get(self, request, format=None):
        address = Address.objects.all()
        serializer = AddressSerializer(address, many=True)
        return Response(serializer.data)

    def post(self, request, format=None):
        serializer = AddressSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    @classmethod
    def get_extra_actions(cls):
        return []

Мой запрос get выглядит хорошо, поскольку возвращает значение, но выглядит как-то не так с AddressSerializer (data = request.data)

enter image description here

1 Ответ

0 голосов
/ 04 апреля 2020

Ваш AdressSerializer содержит не все поля, необходимые для модели Adress.

AdressSerializer.create() внутренне вызывает Adress.create(), что неизбежно повышает ValidationError, если не передать значение для каждого требуемого field

class AddressSerializer(serializers.ModelSerializer):

   class Meta:
       model = Address
       fields = ('street_address','apartment_address','country') 
       # need 'username' and 'adress_type'
...