Django Rest 框架中的外键关系问题 API

Foreign Key Relation Problem in Django Rest Framework API

我有以下型号:

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。但是,当我尝试将新的 Post 添加到特定的 user_id 时,我从 API 视图中收到以下错误:

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

我的序列化程序实现有问题吗? user_id 已在 Posts 模型中声明为外键。

一个 运行 版本的 DEMO API 在这里:

https://thymesis-memories.herokuapp.com/api/memories/create

django-version: 2.1.3
DRS-version: 3.9.0 

像这样更改 Post 创建:

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 访问用户 ID。如果您将 FK 定义为 user.

,django 还会创建名为 user_id 的 table 列