2016-12-06 43 views
0

我有两个型号,一个是指向其他模型。Django的REST:在一个创建相关的表项分贝POST

class ModelA(models.Model): 
    field1 = models.CharField() 
    field2 = models.CharField() 

class ModelB(models.Model): 
    field3 = models.CharField() 
    field4 = models.CharField() 
    modela = models.ForeignKey(ModelA) 

我正在使用Django REST进行数据操作。我正尝试使用一个ajax调用向ModelAModelB插入数据。对于ModelA中的一个条目,我有一个ModelB中的条目列表。所以我的阿贾克斯数据是,

ajax_data = {modela: {....}, modelb: [{...}, {...}, ...]} 

当我只使用一个模型,我能够保存,否则我不是。我可以在一个POST请求中保存两个相关的模型吗?

+0

你使用Django其余的模型序列? –

+0

是的..我正在使用ModelSerializer –

回答

0

是。我要去use the non-accepted answer from this question

The Django docs state你需要保存依赖模型(A,你的情况),才可以保存相关模型(B,你的情况。)

Note that you must save an object before it can be assigned to a foreign key relationship. For example, creating an Article with unsaved Reporter raises ValueError:

>>> r3 = Reporter(first_name='John', last_name='Smith', email='[email protected]') 
>>> Article.objects.create(headline="This is a test", pub_date=date(2005, 7, 27), reporter=r3) 
Traceback (most recent call last): 
... 
ValueError: save() prohibited to prevent data loss due to unsaved related object 'reporter'. 

由于其他答案说 - 你可以在两个POST中做到这一点,或在视图中处理它。这是很难给出具体细节没有看到您的视图代码,但the DRF docs have this covered.

我在这里适应罗伯特的使用代码。如果这是一个被接受的答案,我只是将它作为一个副本链接起来。

class ASerializer(serializers.ModelSerializer):       
    class Meta: 
     model = ModelA 
     fields = ('field1', 'field1') 


class BSerializer(serializers.ModelSerializer): 
    bclass = ASerializer() 
    class Meta: 
     model = ModelB 
     fields = ('field1', 'field2', 'etc') 

views.py

import generics 

class BCreateAPIView(generics.CreateAPIView): 
    model = ModelB 
    serializer_class = BSerializer 
+1

这是解决方案:) –

相关问题