我正在嘗試爲用戶收藏夾創建一個API端點。但是,我現在遇到了一個我無法解決的問題。Django Rest Framework:「in()無效文字」與CharField
在POST到端點時,CharField出現無效字面錯誤。
ValueError at /api/users/2/favourites/
invalid literal for int() with base 10: 'track'
這裏是串行:
class FavouriteSerializer(serializers.ModelSerializer):
user = UserSerializer(
read_only=True,
default=CreateOnlyDefault(serializers.CurrentUserDefault())
)
type = serializers.CharField(source='content_type')
object = FavouriteObjectRelatedField(read_only=True)
id = serializers.IntegerField(source='object_id')
def create(self, validated_data):
raise TypeError(validated_data)
class Meta:
model = Favourites
fields = ('type', 'object', 'user', 'type', 'id')
我已驗證該錯誤的串行而不是通過在串行的to_internal_value()
方法引發異常的邪見。這是在視圖之後發生的。
我檢查了我的數據庫以確認沒有數據錯誤。
一兩件事,可能導致錯誤(不知道如何)是我使用的是content types framework。
因此,這裏的模式:在type
場發生
class Favourites(models.Model):
objects = FavouritesManager()
user = models.ForeignKey('Profile.User', on_delete=models.CASCADE)
content_type = models.ForeignKey(ContentType)
object_id = models.IntegerField()
object = GenericForeignKey('content_type', 'object_id')
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name = _('favorite')
verbose_name_plural = _('favorites')
unique_together = (('user', 'content_type', 'object_id'),)
錯誤。如果將字段更改爲IntegerField
並將整數用於數據,則不會收到此錯誤。奇怪的是,如果我將id
字段變成CharField
,我也不會收到錯誤。因此,我認爲這與ContentType
的外鍵有關,但不知道如何。
您可以查看完整的堆棧跟蹤here。