一個執行緒屬于一個板。所以我希望 ThreadList 視圖接受帶有外鍵的 POST 請求board。我的嘗試導致錯誤。AssertionError: Relational field must provide a queryset argument, override get_queryset, or set read_only=True
serializers.py
class ThreadSerializer(serializers.ModelSerializer):
post = PostSerializer(many=True, read_only=True)
# board = serializers.ReadOnlyField(source='board.id')
board = serializers.PrimaryKeyRelatedField(source='board.id')
class Meta:
model = Thread
fields = ['id', 'title', 'post', 'board']
views.py
class ThreadList(generics.ListCreateAPIView):
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
def perform_create(self, serializer):
serializer.save(thread_admin=self.request.user)
queryset = Thread.objects.all()
serializer_class = ThreadSerializer
models.py
class Board(models.Model):
name = models.CharField(max_length=25, unique=True)
created = models.DateTimeField(auto_now_add=True)
board_admin = models.ForeignKey('auth.User', on_delete=models.CASCADE, related_name='board_admin')
board_moderator = models.ManyToManyField(User, related_name='board_moderator')
class Meta:
ordering = ['created']
class Thread(models.Model):
title = models.CharField(max_length=250)
created = models.DateTimeField(auto_now_add=True)
thread_admin = models.ForeignKey('auth.User', on_delete=models.CASCADE, related_name='thread')
board = models.ForeignKey(Board, on_delete=models.CASCADE, related_name="thread")
class Meta:
ordering = ['created']
uj5u.com熱心網友回復:
serializers.PrimaryKeyRelatedField有一個必需的引數,需要包含以告知需要驗證queryset哪個 id 。queryset
在你的情況下,它應該是
class ThreadSerializer(serializers.ModelSerializer):
...
board = serializers.PrimaryKeyRelatedField(queryset=Board.objects.all())
...
筆記
請注意,您不需要指定source='board.id',因為django-rest-framework已經為您處理了。
額外的
如果沒有額外的引數會被傳入serializers.PrimaryKeyRelatedField來改變默認行為,你可以只包含board在class Meta's中fields而無需serializers.PrimaryKeyRelatedField手動使用。
class ThreadSerializer(serializers.ModelSerializer):
post = PostSerializer(many=True, read_only=True)
class Meta:
model = Thread
fields = ['id', 'title', 'post', 'board']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/450623.html
標籤:django django-rest-framework
