【问题标题】:Creating multiple objects of the same instance and then list them in DRF创建同一实例的多个对象,然后在 DRF 中列出它们
【发布时间】:2018-07-30 22:01:53
【问题描述】:

我想在 Django Rest Framework 中自动创建同一实例的多个对象(即在发布请求中不提供太多数据),然后返回这些对象的列表。

假设我有这个模型:

class City(models.Model):
    ...

class House(models.Model):
    city = models.Foreignkey(City, ...)
    ...

class Resident(models.Model):
    house = models.ForeignKey(House, ...)

我现在希望能够通过这样的后请求访问路由:

localhost:8000/api/city/createresidents/

然后像这样取回 JSON:

{
  [
    {
      residentid = "<some_number>",
      residentname = "<some_name>",
    },
    {
      residentid = "<some_number>",
      residentname = "<some_name>",
    },
    ...
  ]
}

在后请求的正文中,我附加了有关房屋和创建的居民的信息,可能是哪条街道,居民的姓氏,或者有关房屋或各自模型中的居民的其他一些数据。

如果视图应该始终创建,比如说 4 个居民,我将如何做呢?

我尝试修改CreateModelMixinperform_create() 方法,但无法正常工作。

编辑

我意识到我的问题写得不够清楚。

我希望帖子正文数据看起来像这样:

{
  "house": "<some_house_id>"
}

这样 Django 就知道房子在哪里(意味着它属于哪家餐厅),并且 Django 使用硬编码的输入创建了 4 个居民,除了他们自动被分配到那个房子。

【问题讨论】:

  • 你能添加一个POST数据的例子吗?
  • @jerin-peter-george 感谢您的帮助。我编辑了帖子以使我的问题更清楚:)

标签: python django django-models django-rest-framework django-views


【解决方案1】:

所以我现在想出的方法是创建以下视图:

class CreateResidentList(mixins.ListModelMixin,
                         mixins.CreateModelMixin,
                         generics.GenericAPIView):
    serializer_class = StampSerializer
    permission_classes = (IsAuthenticated, IsGod)

    def get_queryset(self):
        residents = Resident.objects.filter(house__id=self.kwargs['house'])
        return stamps

    def post(self, request, *args, **kwargs):
        if 'house' in request.data:
            house = House.objects.get(id=request.data['house'])
            while(house.resident_set.all().count() < 500):
                self.create(request, *args, **kwargs)
        return self.list(request, *args, **kwargs)

请给我反馈这是否是好的 python / django 代码:) 在我的服务器上,这按预期工作,但我不确定,如果我在此处正确复制它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    相关资源
    最近更新 更多