D
Ddef ModelA(models.Model):
id = models.CharField(primary_key=True, max_length=50)
val_a = models.CharField(db_index=True, max_length=100)
val_b = models.CharField(db_index=True, max_length=100)
modelB = models.ForeignKey(modelB, on_delete=models.CASCADE, db_constraint=False)
def ModelB(models.Model):
id = models.CharField(primary_key=True, max_length=50)
val_c = models.CharField(db_index=True, max_length=100)
val_d = models.CharField(db_index=True, max_length=100)
def ModelC(models.Model):
id = models.CharField(primary_key=True, max_length=50)
val_e = models.CharField(db_index=True, max_length=100)
modelB = models.OneToOneField(ModelB, on_delete=models.CASCADE, null=False, blank=False)
<
class ModelAViewSet(ListDataResponseMixin, APIKeyViewSet):
endpoint_permissions = [APILicenseKeyPermission.Codes.A]
queryset = ModelA.objects.all()
serializer_class = ModelASerializer
filterset_class = ModelAFilter
filter_backends = [DjangoFilterBackend]
<
class ModelASerializer(serializers.ModelSerializer):
class Meta:
model = ModelA
fields = (
"id",
"val_a",
"val_b"
)
<
Вы можете просто использовать поле CharField, например, так:
class ModelASerializer(serializers.ModelSerializer):
val_e = serializers.CharField(source='modelB.modelc.val_e')
class Meta:
model = ModelA
fields = (
"id",
"val_a",
"val_b",
"val_e"
)
Это возможно потому, что ModelA имеет ForeignKey к ModelB, а ModelB имеет отношение One To One к ModelC. Более подробную информацию о источнике можно найти в документации.