【发布时间】:2020-02-06 09:03:17
【问题描述】:
我有以下型号:
models.py:
class Host(models.Model):
serialnr = models.IntegerField(primary_key=True)
...some other fields...
class Event(models.Model):
id = models.AutoField(primary_key=True)
hosts = models.ManyToManyField(Host, through='EventHost')
...some other fields...
class EventHost(models.Model):
serialnr = models.ForeignKey(Host, on_delete=models.PROTECT)
event = models.ForeignKey(Event, on_delete=models.CASCADE)
...some other fields...
class Meta:
unique_together = ("serialnr", "event")
serializers.py:
class EventSerializer(serializers.ModelSerializer):
class Meta:
model = Event
fields = '__all__'
class HostSerializer(serializers.ModelSerializer):
class Meta:
model = Host
fields = '__all__'
class EventHostSerializer(serializers.ModelSerializer):
event = EventSerializer(read_only=True)
serialnr = HostSerializer(read_only=True)
class Meta:
model = EventHost
fields = '__all__'
views.py
class EventViewSet(viewsets.ModelViewSet):
queryset = Event.objects.order_by('-date')
serializer_class = EventSerializer
class HostViewSet(viewsets.ModelViewSet):
queryset = Host.objects.order_by('-serialnr')
serializer_class = HostSerializer
class EventHostViewSet(viewsets.ModelViewSet):
queryset = EventHost.objects.order_by('-start_date')
serializer_class = EventHostSerializer
我正在使用 HTTP POST 发送以下 JSON:
{event: {id: 4}, serialnr: {serialnr: 1234}, other_filed: 20}
但它不是 event_id 和 serialnr_id 没有反序列化,如日志中所示:
psycopg2.errors.NotNullViolation: null value in column "event_id" violates not-null constraint
DETAIL: Failing row contains (12, 20, null, null).
我可以使用 HTTP GET 读取数据,但无法使用 POST 写入。我应该如何构造适当的序列化程序以使其工作?
当我尝试像下面这样发送 JSON 时,它也失败了:
{event_id: 4, serialnr_id: 1234, other_filed: 20}
【问题讨论】:
标签: python django python-3.x django-rest-framework deserialization