2016-03-25 14 views
0

Sadece bir istekle birlikte oluşturmak istediğim iki modelim var. Bu bir perform_create'da yapılabilir mi, yoksa bir yolu var mı?REST çerçevesinde perform_create uygulamasında iki farklı model nasıl eklenir?

modeller:

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

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

görünümler:

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

serializer_class = FooSerializer 

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

Ben BarFoo oluşturulur her zaman oluşturulur istiyorum.

cevap

0

Tam olarak ne yapmak istediğinize bağlı olarak, FooSerializer'da writeable nested Serializer ile tanımlanabilir.

Bununla birlikte, her zaman "her zaman Foo'nun oluşturulduğunda Bar'ı oluşturmasını istiyorsanız" yaparsanız, bunu catching the Foo Model's post_save signal yapabilir ve gereken Bar'u oluşturur. Örneğin, kabukta bir Foo oluştursanız bile, Bar'ın oluşturulmasını sağlar.

@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) 
İlgili konular