我有两个模型,Book
和ReadBy
,如中所述型号.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,以便能够“阅读”一本书。你知道吗
谢谢。你知道吗
好吧,我解决了。你知道吗
我忘了将
ReadBySerializer
中的book字段定义为PrimaryKeyRelatedField
:实际上,我似乎可以完全删除这一行,因为如果没有指定任何内容,
PrimaryKeyRelatedField
是默认值。你知道吗相关问题 更多 >
编程相关推荐