Как обратить вспять сериализаторы, как модели в ForeignKey? - PullRequest
0 голосов
/ 02 апреля 2020

В моделях:

class Product(models.Model):
    name = models.CharField(max_length=100)
    price = models.IntegerField()
    sub_category = models.ForeignKey(SubCategory, on_delete=models.SET_NULL, null=True, related_name='product')

class SubCategory(models.Model):
    sub_category_name = models.CharField(max_length=50)
    sub_category_img = models.ImageField(upload_to='sub_category_img')

В сериализаторах:

class ProductSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Product
        fields = ['url', 'id', 'name', 'price', 'sub_category']   

class SubCategorySerializer(serializers.HyperlinkedModelSerializer):

    product = ProductSerializer(many=True)

    class Meta:
        model = SubCategory
        fields = ['url', 'id', 'sub_category_name', 'sub_category_img', 'product']

Используя модели, я могу получить доступ к Products.sub_category для одного набора запросов, а также SubCategory.product обратный запрос, используя related_name in ForeignKey.

Используя сериализаторы, я могу получить доступ к ProductSerializer запросу с использованием SubCategorySerializer, но не могу получить доступ к SubCategorySerializer из ProductSerializer. Я получаю URL-адрес только для sub_category при использовании ProductSerializer.

Как я могу изменить оба в конечных точках API?

Я пытался, в сериализаторах,

class ProductSerializer(serializers.HyperlinkedModelSerializer):

    sub = SubCategorySerializer()

    class Meta:
        model = Product
        fields = ['url', 'id', 'name', 'price', 'sub_category', 'sub']   

class SubCategorySerializer(serializers.HyperlinkedModelSerializer):

    product = ProductSerializer(many=True)

    class Meta:
        model = SubCategory
        fields = ['url', 'id', 'sub_category_name', 'sub_category_img', 'product']

Это не работает. Как я могу получить оба набора запросов как модели?

1 Ответ

0 голосов
/ 02 апреля 2020

Вы можете попробовать вот так:

class ProductSerializer(serializers.HyperlinkedModelSerializer):

    sub_category = SubCategorySerializer()

    class Meta:
        model = Product
        fields = ['url', 'id', 'name', 'price', 'sub_category'] 

Или просто использовать depth=1 в Сериализаторе продукта:

class ProductSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Product
        fields = ['url', 'id', 'name', 'price', 'sub_category'] 
        depth = 1
...