Search code examples
python-3.xdjangodjango-rest-frameworkdjango-serializer

How do I get a serializer with an instance as a Foreign key?


How do I get a serializer with an instance as a Foreign key? Here is my model and serializer:

class ChargeSchedule(models.Model):
    vehicle = models.OneToOneField(Vehicle, on_delete=models.PROTECT, related_name='vehicle_charge_schedule')
    max = models.FloatField()
    min = models.FloatField()


class ChargeScheduleSerializer(serializers.ModelSerializer):
    class Meta:
        model = ChargeSchedule
        fields = '__all__'

When I try to validate the serializer I get an error saying 'This field must be unique':

class ChargeScheduleViewSet(ModelViewSet):
    model = ChargeSchedule
    serializer_class = ChargeScheduleSerializer

    def create(self, request, *args, **kwargs):
        # request.data = {'min': 10, 'max': 100}
        vehicle = request.user.vehicle
        request.data['vehicle'] = vehicle.id
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True) # FAILS HERE, {ValidationError}{'vehicle': [ErrorDetail(string='This field must be unique.', code='unique')]}

How can I validate this serializer using the Vehicle instance?


Solution

  • Try this:

    def create(self, request, *args, **kwargs):
        # request.data = {'min': 10, 'max': 100}
        vehicle = request.user.vehicle
        ser_data = request.data
        ser_data['vehicle'] = vehicle.id
        serializer = self.get_serializer(data=ser_data)
        serializer.is_valid(raise_exception=True)