D

D
def 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. Более подробную информацию о источнике можно найти в документации.

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