Проблема связи с внешним ключом в Django Rest Framework API - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть следующие модели:

class Users(models.Model):
    user_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    firstname = models.CharField(max_length=50)
    lastname = models.CharField(max_length=50)
    username = models.CharField(max_length=50, null=True, blank=True)
    home_page = models.CharField(max_length=100, null=True, blank=True)
    user_email = models.EmailField(max_length=70, unique=True)
    user_password = models.CharField(max_length=50)
    mobile_number = models.CharField(max_length=20, unique=True)
    is_active = models.BooleanField(default=True)


class Posts(models.Model):
    post_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    user_id = models.ForeignKey(Users, on_delete=models.CASCADE)
    uri = models.CharField(max_length=45)
    title = models.CharField(max_length = 20)
    summary = models.CharField(max_length=30)
    post_body = models.CharField(max_length=3000)
    post_datetime = models.DateTimeField(auto_now_add=True)
    votes = models.IntegerField()
    location = models.CharField(max_length=200)

, и у меня есть следующие сериализаторы:

class UsersSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Users
        fields = ('user_id', 'firstname', 'lastname', 'user_email', 'username',
                  'home_page', 'user_password', 'mobile_number', 'is_active')


class PostsSerializer(serializers.ModelSerializer):

    class Meta:
        model = models.Posts
        fields = ('post_id', 'user_id', 'uri', 'location', 'title', 'summary', 'post_body', 'post_datetime', 'votes')

Этомой код просмотра:

class ListCreatePostsView(generics.ListCreateAPIView):
    queryset = Posts.objects.all()
    serializer_class = PostsSerializer

    def post(self, request, *args, **kwargs):
        a_Post = Posts.objects.create(
            user_id=request.data["user_id"],
            title=request.data["title"],
            location=request.data["location"],
            summary=request.data["summary"],
            post_body=request.data["post_body"],
            uri=request.data["uri"],
            votes=request.data["votes"]

        )
        return Response(
            data=PostsSerializer(a_Post).data,
            status=status.HTTP_201_CREATED
        )

У меня есть API, работающий с использованием Django Rest Framework.Тем не менее, когда я пытаюсь добавить новое сообщение в определенный user_id, я получаю следующую ошибку из представления API:

Cannot assign "'528c2d9e-da2e-4c3d-9a92-eafb98e5d06e'": "Posts.user_id" must be a "Users" instance.

Это проблема с моей реализацией Serializer?user_id уже указано в качестве внешнего ключа в модели сообщений.

Работающая версия DEMO API находится здесь:

https://thymesis -памяти.herokuapp.com / api / memory / create

django-version: 2.1.3
DRS-version: 3.9.0 

1 Ответ

0 голосов
/ 17 декабря 2018

Измените создание записи следующим образом:

a_Post = Posts.objects.create(
        user_id_id = request.data['user_id'],  # <-- Here
        title=request.data["title"],
        location=request.data["location"],
        summary=request.data["summary"],
        post_body=request.data["post_body"],
        uri=request.data["uri"],
        votes=request.data["votes"]

    )

Используйте user вместо user_id , потому что это поле ForeignKey, а когда вы используете user = ForeignKey(User), тогда выможет получить доступ к идентификатору пользователя на post.user_id.Также django создает столбец таблицы с именем user_id, если вы определяете FK как user.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...