2016-07-13 77 views
0

我正在嘗試爲用戶收藏夾創建一個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

回答

1

這裏有一個CharField

type = serializers.CharField(source='content_type') 

雖然content_typeForeignKeyContentType其主鍵是一個整數

content_type = models.ForeignKey(ContentType) 

如果您發佈type=track,Django會嘗試投'track'爲一個整數,顯然失敗。

你的類型應該是:

type = serializers.IntegerField(source='content_type') 

你不應該張貼type=track,但type=5例如,如果ContentType行的id5

試試這一個外殼,讓您的內容類型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'), 
    ... 
] 
相關問題