2015-02-05 14 views
0

那麼深,我有這樣的模式:ModelSerializer POST應該是平的,而GET應該有2

class Article(models.Model): 
    user = models.ForeignKey('User', null=True) # Allow anonymous articles 
    url = models.CharField(max_length=255) 
    date = models.DateTimeField() 
    status = models.CharField(max_length=255) 

這串:

class ArticleSerializer(serializers.modelSerializer): 
    class Meta: 
     model = Article 
     fields = ('user', 'date', 'status') 
     depth = 2 

有了這個視圖集:

class ArticleViewSet(viewsets.ModelViewSet): 
    queryset = Article.objects.all(= 
    serializer_class = ArticleSerializer 

所以我在一個請求中獲取與用戶相關的所有內容。 問題是,如果我想添加一篇文章,我現在必須添加一大堆嵌套的json。我寧願僅通過id引用用戶,並完成它。

像:

{ 
    "user": 1, // Or even null 
    "url": "http://test.tld", 
    "date": now, 
    "status": "published" 
} 

任何想法我怎麼能做到這一點?我想我需要另一個序列化器來寫數據?如何將所有這些綁定在一起?

如果我想這樣發佈JSON,我會收到一個錯誤,指出「非字段錯誤」,因爲「customer」有幾個附加關係,並且由於「深度」,它們也需要填充。但我只想提供一個客戶ID並完成它。

+0

你有[nested serializers](http://www.django-rest-framework.org/api-guide/serializers/#specifying-nested-serialization )你不是在炫耀G? – 2015-02-06 00:09:40

+0

@RossRogers:不,我在整個應用程序的其餘部分使用HyperlinkedModelSerializers,但問題是,如果我想發佈文章,我會得到「非字段錯誤」,因爲我必須指定整個客戶以及它的所有子 - 關係,這太深了^^ – Sorona 2015-02-06 11:24:55

回答

1

可以在DRF使用屬性,它應該做你正在尋找做

class Article(models.Model): 
    _user = models.ForeignKey('User', null=True, db_column="user_id") # Allow anonymous articles 
    url = models.CharField(max_length=255) 
    date = models.DateTimeField() 
    status = models.CharField(max_length=255) 

@property 
def user(self): 
    return self._user 
@user.setter 
def user(self,value): 
    self._user = User.objects.get(id=value) 

什麼,然後在串行

class ArticleSerializer(serializers.modelSerializer): 
    user = serializers.Field(source='user') 

class Meta: 
    model = Article 
    fields = ('user', 'date', 'status') 
    depth = 2 

,將返回當你看書的用戶對象JSON,你可以修改@property得到你需要的東西

+0

基本上這將是一個有趣的解決方案,問題是,用戶現在說:「用戶」=「用戶對象」,而不是實際的數據,只要我獲得文章。有沒有辦法解決? – Sorona 2015-02-06 16:29:03

相關問題