2016-05-12 44 views
2

我有一個模型,我已經重寫了id作爲CharField和主鍵。這裏的模型及其串行:Django REST框架:如何使POST在POST時需要Id字段,即非只讀字段?

class Tool(models.Model): 
    id = models.CharField(max_length=10000, primary_key=True, default=uuid.uuid4, editable=False) 
    description = models.TextField(null=True, blank=True) 
    ... 

class ToolSerializer(serializers.HyperlinkedModelSerializer): 

    class Meta: 
     model = Tool 
     fields = (
      'id', 
      'description', 
      ... 
     ) 

默認情況下,Django的REST框架,標誌着id場爲只讀,並且不需要它在POST請求。但是我希望它是可寫的,並且在POST時需要它。我如何實現這一目標?

+0

只是一個好奇心,你爲什麼需要這個? –

回答

3

我想,我發現在一個意想不到的地方DRF文件的答案:

http://www.django-rest-framework.org/api-guide/serializers/#customizing-multiple-update

我需要在串行創建一個明確的id場這樣的:

class ToolSerializer(serializers.HyperlinkedModelSerializer): 
    id = serializers.CharField() 

    class Meta: 
     model = Tool 
     fields = (
      'id', 
      'description', 
      ... 
     ) 

這將覆蓋默認ID字段,創建爲只讀。

+0

它工作嗎?它真的更新數據庫中的PK域嗎? –

+0

是的,它肯定適用於GET,POST和DELETE請求,我正在調試PUT。我決定這樣做是因爲沒有工具名稱是唯一的,我可以向大家展示他們的名字(因此在網址中使用工具名稱)。那麼爲什麼不使用名稱作爲主要ID?在這種情況下,在POST後,您必須爲工具指定'id',所以我必須使'id'字段不可讀。 –

+1

@KarinaKlinkevičiūtė只是偶然發現了創建可寫'id'字段的另一個原因:在ListSerializers上實現更新:http://www.django-rest-framework.org/api-guide/serializers/#customizing-multiple-update –

相關問題