【问题标题】:One to One Field throwing error "This field must be unique." django rest framework一对一字段抛出错误“此字段必须是唯一的。” django 休息框架
【发布时间】:2020-07-25 10:54:27
【问题描述】:

当我向我的 django 服务器发送一个发布请求时,我遇到了这个错误,它似乎只返回

   "user": [
       "This field must be unique."
       ]
   }

我做了一些调试,发现它与我使用一对一字段的事实有关,这是我的: 模型.py

from django.contrib.auth.models import User
class EventPost(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    event_name = models.CharField(max_length=50 )
    event_time = models.CharField(max_length = 50, default = '')
    event_date = models.CharField(max_length = 50, default = '')

    def __str__(self):
        return self.event_time

序列化器.py

from rest_framework import serializers
from .models import EventPost
from django import forms
from django.contrib.auth.validators import UnicodeUsernameValidator
class EventPostSerializer(serializers.ModelSerializer):
    class Meta:
        model = EventPost
        fields = (
            'user',
            'event_name',
            'event_time',
            'event_date',
        )

还有我的观点.py

from django.shortcuts import render
from rest_framework.response import Response
from rest_framework.views import APIView
from .models import EventPost
from .serializers import EventPostSerializer
from rest_framework.permissions import IsAuthenticated
# Create your views here.
class PostViews(APIView):

    permission_classes = (IsAuthenticated,)

    def get(self, request, *args, **kwargs):
        data = {
            'GET':'True',
        }
        return Response(data)

    def post(self, request,*args, **kwargs):
        serializer = EventPostSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        else:
            return Response(serializer.errors)

我对 django rest 框架很陌生,所以请原谅。如果您需要更多信息,请告诉我。

【问题讨论】:

  • A OneToOneFieldForeignKeyunique=True,所以是的。该字段中的值需要唯一。

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


【解决方案1】:

当模型 A 的一条记录与模型 B 的一条记录完全相关时,应使用一对一字段。如果该对象以某种方式扩展另一个对象,则该字段可用作对象的主键.而是使用多对一关系

user = models.ForeignKey(User, on_delete=models.CASCADE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-09
    • 2021-06-14
    • 2021-02-13
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    相关资源
    最近更新 更多