Не удается получить данные из 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)