Не удается получить данные из OneToOneFiled в Django Rest Framework

Models.py- В классе Hiring Model поле Driver является OneToOneField, как получить данные из него, я не нашел правильного решения как работать с отношением OneToOneField, пожалуйста, помогите мне

class Driver(BaseModel):
    employee_id = models.CharField(max_length=8,unique=True,null=True, default=True)
    city = models.ForeignKey(
        City,
        models.CASCADE,
        verbose_name='City',
        null=True, blank=True
    )
    location = models.ForeignKey(
        Location,
        models.CASCADE,
        verbose_name='Location',
        null=True, blank=True
    )
class City(BaseModel):
    name = models.CharField('Name', max_length=80)
    employee_series = models.CharField('Name', max_length=3)
    available_employee_id = models.IntegerField(default=1)

    def __str__(self):
        return self.name
class Location(BaseModel):
    city = models.ForeignKey(
        City,
        models.CASCADE,
        verbose_name='City',
    )
    name = models.CharField('Name', max_length=80)

    def __str__(self):
        return self.name
class Hiring(BaseModel):
    driver = models.OneToOneField(
        Driver,
        models.CASCADE,
        related_name='driver',
        verbose_name='Driver',
        null=True, blank=True
    )
    status = models.CharField(max_length = 255,choices=STATUS_CHOICES, null=True, blank=True)

serializers.py

class CitySerializer(serializers.ModelSerializer):
    class Meta:
        model = City
        fields = ('id', 'name')
class LocationSerializer(serializers.ModelSerializer):
     class Meta:
        model = Location
        fields = ('id', 'name')

class HiringstatusSerializer(serializers.ModelSerializer):
     class Meta:
        model = Hiring
        fields = ('id','driver', 'status')

class DriverEditListSerializer(serializers.ModelSerializer):
    city = CitySerializer(read_only=True)
    location = LocationSerializer()
    hiring=HiringstatusSerializer(many=True, required=False, allow_null=True)
    class Meta:
        model = Driver
        fields=('id','city','location','hiring')

views.py

class DriverViewSet(viewsets.ModelViewSet):
    queryset = Driver.objects.filter(is_active=1)
    serializer_class = DriverEditListSerializer

output- в выводе вы можете увидеть, что в поле найма отображается нулевое значение

{ "id": 4343, "city": { "id": 1, "name": "Мумбаи" }, "location": { "id": 89, "name": "Santacruz" }, "наем": null }

После related_name='driver' вы обращаетесь к записи Hiring с помощью:

class DriverEditListSerializer(serializers.ModelSerializer):
    city = CitySerializer(read_only=True)
    location = LocationSerializer()
    hiring=HiringstatusSerializer(source='driver', required=False, allow_null=True)
    class Meta:
        model = Driver
        fields=('id','city','location','hiring')

изменения, связанные с именованием, решают эту проблему. class Hiring(BaseModel): driver = models.OneToOneField( Driver, models.CASCADE, related_name='hiring', verbose_name='найм', null=True, blank=True ) status = models.CharField(max_length = 255,choices=STATUS_CHOICES, null=True, blank=True)

Вернуться на верх