![](/img/trans.png)
[英]invalid literal for int() with base ten in listAPI view django rest framework
[英]Django Rest Framework: “Invalid literal for in()” with a CharField
我正在嘗試為用戶收藏夾創建一個API端點。 但是,我現在遇到了一個我無法解決的問題。
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()
方法中引發異常來驗證錯誤是由序列化器而不是視圖引起的。 查看后會觸發。
我已經檢查了數據庫,以確認沒有數據錯誤。
可能導致錯誤(不確定如何)的一件事是我正在使用內容類型框架 。
因此,這是模型:
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'),)
錯誤發生在type
字段上。 如果將字段更改為IntegerField
並為數據使用整數,則不會出現此錯誤。 奇怪的是,如果我將id
字段變成CharField
,也不會收到錯誤消息。 因此,我相信這與ContentType
的外鍵有關,但不知道如何做。
您可以在此處查看完整的堆棧跟蹤。
在這里,您有一個CharField
:
type = serializers.CharField(source='content_type')
當content_type
是ContentType
的ForeignKey
,其主鍵是整數:
content_type = models.ForeignKey(ContentType)
如果POST type=track
,Django將嘗試將'track'
為整數,這顯然會失敗。
您的類型應為:
type = serializers.IntegerField(source='content_type')
而且,如果ContentType
行的id
為type=5
,則不應該POST type=track
,而應該type=track
5
。
在外殼上嘗試此操作以獲取您的內容類型的ID:
>>> from django.contrib.contenttypes.models import ContentType
>>> ContentType.objects.all().values_list()
[
(1, 'auth', 'user'),
(2, 'auth', 'permission'),
(3, 'auth', 'group'),
(4, 'contenttypes', 'contenttype'),
(5, 'sessions', 'session'),
...
(8, 'yourapp', 'yourmodel'),
...
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.