【问题标题】:Retrieving multiple objects from Django REST API从 Django REST API 检索多个对象
【发布时间】:2021-01-12 21:39:52
【问题描述】:

我使用多对多关系使用 REST api 创建了一个 Django 后端。我想知道获取某个对象指向的所有对象的最佳方法是什么。

所以在我的例子中,有些牌组有牌,牌组指向牌的索引。卡片可以属于多个套牌。

我所做的是检索所有卡片组,然后对于特定卡片组,我将遍历每个卡片索引的 for 循环,并调用 api 并检索卡片并将其添加到本地数组中。在此之前我没有任何后端经验,所以我想知道如何有效地设置我的前端如何调用后端。我使用 react-native 编写前端,并使用 axios 进行调用。

编辑:包括模型和序列化程序。两者都很容易完成工作

class Card(models.Model):
    task = models.TextField()

    def __str__(self):
        return self.task

class Deck(models.Model):
    title = models.CharField(max_length=21, unique=True, primary_key=True)
    cards = models.ManyToManyField(Card, blank=True, related_name="cards")

    def __str__(self):
        return self.title

和序列化程序

class CardSerializer(serializers.ModelSerializer):
    class Meta:
        model = Card
        fields = ('id', 'uses_names', 'present')


class DeckSerializer(serializers.ModelSerializer):
    class Meta:
        model = Deck
        fields = '__all__'

【问题讨论】:

  • 你能在你的问题中添加卡片和甲板模型,以及相应的序列化器和视图作为代码吗?
  • @BriseBalloches 是的,我现在要补充一点,我问的更多是理论问题,而不是专门针对我的问题,但我感谢您的帮助

标签: django react-native rest django-rest-framework


【解决方案1】:

请帮助将您的问题标记为明确,以备下次使用。

关于获取某个对象指向的所有对象。

class CardSerializer(serializers.ModelSerializer):
    class Meta:
        model = Card
        fields = ('id', 'uses_names', 'present', 'decks')

    decks = serializers.SerializerMethodField()

    def get_decks(self, obj):
        decks_qs = Deck.objects.filter(cards__in=[obj.id])
        decks = DeckSerializer(
            decks_qs, many=True, context=self.context).data
        return decks


class DeckSerializer(serializers.ModelSerializer):
    class Meta:
        model = Deck
        fields = '__all__'

    cards = CardSerializer(many=True, read_only=True)

为避免循环导入错误,您应该在函数中使用import

【讨论】:

  • 非常感谢您。我应该在哪里调用 get_decks 以便在单个 api 请求中返回所有子项?会在 DeckView 中吗?
  • 不需要,只需要创建一个类 CardView 然后在该视图中定义 CardSerializer 即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-28
  • 2016-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多