Ошибка создания поля один в один «Это поле должно быть уникальным». django рамки отдыха - PullRequest
1 голос
/ 13 апреля 2020

Я застреваю с этой ошибкой, когда я отправляю почтовый запрос на мой django сервер, он, кажется, только возвращает

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

, и я немного отладил и обнаружил, что это связано с фактом Я использую поле один к одному, вот мое: models.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

serializers.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',
        )

и мои views.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, поэтому прошу прощения. Также, пожалуйста, скажите мне, если вам нужна дополнительная информация, чем эта.

1 Ответ

1 голос
/ 17 апреля 2020

Поля «один к одному» следует использовать, когда одна запись модели A связана ровно с одной записью модели B. Это поле может быть полезно в качестве первичного ключа объекта, если этот объект каким-либо образом расширяет другой объект. , Вместо этого используйте отношения «многие к одному» :

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