【问题标题】:Django Rest Framework - Serializing Model RelationshipsDjango Rest Framework - 序列化模型关系
【发布时间】:2020-11-22 18:53:20
【问题描述】:

我一直在研究这个问题一段时间,无法深入了解我做错了什么。 我正在尝试使用 PrimaryKeyRelatedField 的 Django REST 框架在两个模型之间添加多对多关系,但无法保存该关系。

我下面的代码所做的是保存新创建的 first_model 项目,但它不保存关系(如果我查看关系表它仍然是空的)

任何关于我哪里出错的提示将不胜感激!

这是我拥有的代码的 sn-p: 以下是观点:

@api_view(['POST'])
def RiskCreate(request):
    serializer = First_ModelSerializer(data = request.data)

    if serializer.is_valid():
        serializer.save()
    else:
        print("data is not valid")

    return Response(serializer.data)

以下是模型:

class First_Model(models.Model):

    Model_Title = models.CharField(max_length = 500, blank=True)
    Model_Descr = models.CharField(max_length = 500, blank=True)
    relationship = models.ManyToManyField(Second_Model)

class Second_Model(models.Model):
    Title_two = models.CharField(max_length = 50, unique = True)
    Descr_two = models.CharField(max_length = 50, unique = True)

这里是序列化器:

class First_ModelSerializer(serializers.ModelSerializer):
    relationship = serializers.PrimaryKeyRelatedField(many = True, read_only=True)

    class Meta:
        model = Risks
        fields = ('Model_Title', 'Model_Descr', 'relationship')

这是我将数据传递给视图的方式:

function addHazard(item){
        var url = baseurl + 'api/Create/'
        var ID = item.id
        var Model_Title = document.getElementById('Model_Title').value
        var Model_Descr = document.getElementById('Model_Descr').value
        fetch (url, {
            method:'POST',
            headers:{
                'Content-type':'application/json',
                'X-CSRFToken': csrftoken
            },
            body:JSON.stringify({'Model_Title':Model_Title, 'Model_Descr':Model_Descr, 'relationship': [{'id':ID}]})
        })

【问题讨论】:

    标签: django django-rest-framework many-to-many


    【解决方案1】:

    问题是read_only=True在relationship字段中,explanation in docs

    只需删除它,

    relationship = serializers.PrimaryKeyRelatedField(many = True)
    

    【讨论】:

      猜你喜欢
      • 2015-12-13
      • 2016-12-18
      • 1970-01-01
      • 2013-11-27
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多