【问题标题】:How to pass a json to a serializer to store in model如何将 json 传递给序列化程序以存储在模型中
【发布时间】:2019-09-17 23:17:47
【问题描述】:

我的记录/model.py 是,

class HistoricalRecords(models.Model):
    user = models.ForeignKey('User', on_delete=models.CASCADE, null=True, blank=True)
    role = models.CharField(max_length=255, null=True, blank=True)
    model = models.CharField(max_length=255, null=True, blank=True)
    torque = models.IntegerField(null=True, blank=True)
    car = models.TextField(null=True, blank=True)
    date_time = models.DateTimeField(default=timezone.now)

我的记录/serializer.py 是

class SaveAuditRecordSerializer(serializers.ModelSerializer):
    class Meta:
        model = HistoricalRecords
        fields = ('user', 'role', 'model', 'torque', 'car', 'date_time')

我的记录/views.py 是,

def AuditRecord(request):

    serializer = SaveAuditRecordSerializer(data=request, partial=True)
    if serializer.is_valid():
        serializer.save()

        return Response(status=status.HTTP_201_CREATED)
    return Response(serializer.errors,
                    status=status.HTTP_201_CREATED)

我正在尝试从另一个应用程序的另一个视图中调用此 AuditRecord(req),例如

rec = {}
audit_record['user'] = request.user
audit_record['role'] = "Role"
audit_record['model'] = "M"
audit_record['torque'] = 22222
audit_record['action'] = "car created"
audit_record['date_time'] = datetime.now()
AuditRecord(audit_record)

我没有收到任何错误,但它没有保存到数据库 我的方法有什么错误吗?

【问题讨论】:

  • 你为什么要这么做?为什么不直接在该视图中创建记录,例如使用HistoricalRecords.objects.create(...)
  • 内部记录/views.py ?
  • 在“另一个应用程序的视图”中。
  • 我应该在这段代码中做哪些修改以通过序列化程序保存数据?

标签: django python-3.x django-rest-framework django-views serialization


【解决方案1】:

如果您的其他应用中有一个模型指向您的 AuditRecord,并且您想在它的创建端点上创建记录,则可以使用该其他应用的序列化程序来创建 AuditRecord 的实例。

OtherSerializer(serializers.Serializer):
    audit_record = AuditRecordSerializer(required=False, write_only=True)

    def create(self, validated_data):
        audit_record_data = validated_data.pop('audit_record')

        audit_record = AuditRecordSerializer().create(audit_record_data)
        validated_data.update({'audit_record': audit_record})

        return super(OtherSerializer, self).create(validated_data)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-08
    • 2011-04-24
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 2016-10-03
    • 2019-07-25
    • 1970-01-01
    相关资源
    最近更新 更多