python - Django 休息框架保存对象问题

标签 python django rest django-rest-framework

分析

总而言之,下面的方法应该会起作用,下面提供了一个解决方案。我留下了这个问题,以防其他人迷失在这个问题中。

原始问题

在 Django M2M 教程中,我们有披萨和浇头。作为我的应用程序的一部分,我拥有作为 M2M 字段的浇头,以及用于添加新浇头的端点。但是,我只想添加不存在的浇头,否则我只想返回现有的浇头。这是为了避免比萨和浇头之间的嵌套 M2M 关系导致问题,我有两个端点,一个用于比萨,一个用于浇头,然后添加浇头 post_save在 View 中。

但是,以下内容似乎不起作用:

class ToppingSerializer(serializers.ModelSerializer):
    another_model = serializers.PrimaryKeyRelatedField()

    class Meta:
        model = Topping
        fields = ('id', 'another_model', 'name')

    def save_object(self, obj, **kwargs):
        topping = Topping.objects.get_or_create(another_model=obj.another_model,
                                                name=obj.name)
        return topping

查看代码如下:

    [snip - View code below]
    serializer_class = ToppingSerializer

    serializer = self.get_serializer(data=request.DATA, many=True)
    if serializer.is_valid():
        serializer.save()
        return Response(status=status.HTTP_201_CREATED)
    [snip]

最佳答案

我认为您需要更改句子并在“serializer.objects”末尾添加“.all()”:

for topping in ToppingSerializer.objects.all():
    print topping.id

注意大写字母。要获取类的所有对象,您需要调用该类。如果您定义像 ToppingSerializer 这样的类,要获取该类的所有对象,您必须调用“ToppingSerializer.objects.all()”,您将获得一个对象列表作为返回值。

关于python - Django 休息框架保存对象问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19565365/

相关文章:

python - django-cms 的核心翻译不使用用户的语言

python - 如何使用 Django Admin 注册自定义表单

google-app-engine - 关于在谷歌应用引擎中将 eve 用于 python 框架

ajax - 使用浏览器缓存的增量更新

python - 将数据框列中的字符串映射到数值

ajax - Django - 自定义装饰器仅允许 ajax 请求

python - 处理 DataFrame Pandas 中的缩写和拼写错误的单词

rest - PayPal REST API - 退款交易列表

python - 使用 Python 解析 Alexa XML

python - 使用Python更新二进制文件中的值