创建同一实例的多个对象,然后在DRF

时间:2018-02-20 14:00:48

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

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

所以让我说我有这个模型:

class City(models.Model):
    ...

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

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

我现在希望能够通过这样的postrequest来打一条路线:

localhost:8000/api/city/createresidents/

然后像这样回到JSON:

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

在后期请求的主体中,我附上有关众议院和创建的居民的信息,可能是哪条街道,居民的姓氏,或者其他房屋或居民的其他数据。< / p>

如果视图应该总是创建,我会如何去做,让我们说4个居民?

我尝试修改perform_create()的{​​{1}}方法,但我无法让它工作。

修改

我意识到我没有清楚地写出我的问题。

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

CreateModelMixin

然后Django知道房子的位置(意味着它属于哪个餐厅),Django用硬编码的输入创建了4个居民,除了他们自动被分配到那个房子。

1 个答案:

答案 0 :(得分:0)

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

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代码:) 在我的服务器上,这按预期工作,但我不确定,如果我在这里正确复制它。