如果在Djang中将指定为ForeignKey,则无法发布指定特定id的条目

2024-09-28 21:25:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个模型,BookReadBy,如中所述型号.py地址:

class Book(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    owner = models.ForeignKey(MyUser)

class ReadBy(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    owner = models.ForeignKey(MyUser)
    book = models.ForeignKey(Book)

你知道吗视图.py地址:

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,)

    def pre_save(self, obj):
        obj.owner = self.request.user

class ReadByViewSet(viewsets.ModelViewSet):
    queryset = ReadBy.objects.all()
    serializer_class = ReadBySerializer
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,)

    def pre_save(self, obj):
        obj.owner = self.request.user

你知道吗序列化程序.py地址:

class BookSerializer(serializers.ModelSerializer):
    readby = serializers.SerializerMethodField('get_ready_by')

    def get_read_by(self, obj):
        user = self.context['request'].user
        book = obj
        return ReadBy.objects.filter(book=book, owner=user).exists()

    class Meta:
        model = Book
        fields = ('id', 'created', 'owner', 'readby')

class ReadBySerializer(serializers.ModelSerializer):
    owner = serializers.Field(source='owner.id')
    book = serializers.Field(source='book.id')

    class Meta:
        model = ReadBy
        fields = ('id', 'created', 'owner', 'book')

书是ReadBy中的ForeignKey。原因是我想通过将BookSerializer中的readby字段定义为true或false来查看是否已经阅读了这本书。你知道吗

现在,当我尝试发布ReadBy项目时,我无法显式设置图书id,即使我尝试,我仍然会得到相同的错误:

"Column 'book_id' cannot be null"

我需要知道的是如何显式地指定图书id,以便能够“阅读”一本书。你知道吗

谢谢。你知道吗


Tags: pyselfidobjmodels地址classowner
2条回答

好吧,我解决了。你知道吗

我忘了将ReadBySerializer中的book字段定义为PrimaryKeyRelatedField

book = serializers.PrimaryKeyRelatedField(source='book.id')

实际上,我似乎可以完全删除这一行,因为如果没有指定任何内容,PrimaryKeyRelatedField是默认值。你知道吗

class ReadBy(models.Model):
    ... snip ...
    book = models.ForeignKey(Book, null=True, blank=True)

相关问题 更多 >