如何在REST框架中的perform_create中添加两个不同的模型?

时间:2016-03-25 12:15:41

标签: django django-rest-framework

我有两个模型,我想与一个请求一起创建。这可以在一个perform_create中完成,还是可以解决?

模型:

class Foo(models.Model):
   name = models.CharField() 

class Bar(models.Model):
   foo = models.ForeignKey('foo)

的观点:

class FooViewSet(
    mixins.ListModelMixin,
    mixins.RetrieveModelMixin,
    mixins.CreateModelMixin,
    viewsets.GenericViewSet
):

serializer_class = FooSerializer

def perform_create(self, serializer):
     #???

我希望每次创建Bar时都会创建Foo

1 个答案:

答案 0 :(得分:-1)

根据您想要做什么,可以在FooSerializer中使用writeable nested Serializer进行定义。

但是,如果你总是“想要在每次创建Foo时创建Bar”,那么我会通过catching the Foo Model's post_save signal执行此操作并创建所需的Bar。这确保了Bar的创建,即使你在shell中创建了一个Foo,例如。

@receiver(post_save, sender=Foo)
def create_bar_on_foo_created(sender, instance=None, created=False, **kwargs):
    if created:
        Bar.objects.get_or_create(foo=instance)