2016-11-30 58 views
1

我是Django和DRF的新手。我需要通過GET公開以下JSON,但是我似乎無法讓每個類都成爲類的一部分[]。我相信我可以爲此使用StringRelatedField,但我發現的例子似乎沒有點擊我。提前致謝!學習DRF:序列化組中的模型

預期輸出

{ 
    "classes":[ 
     { 
     "id":24, 
     "name":"Math 101", 
     "starts_on":"2016-08-09", 
     "ends_on":"2016-08-14", 
     "entries_url":"https://example.com/classes/24/classes.json" 
     }, 
     { 
     "id":23, 
     "name":"English 101", 
     "starts_on":"2016-07-28", 
     "ends_on":"2016-07-30", 
     "entries_url":"https://example.com/classes/23/classes.json" 
     } 
    ] 
} 

下面是我整理的。 「nr」僅僅是一個一次性變量,因爲除了類來自什麼外,我實際上並不需要任何數據。

model.py

class Class(models.Model): 
    id = models.CharField(max_length=10) 
    starts_on = models.DateTimeField(auto_now_add=False) 
    ends_on = models.DateTimeField(auto_now_add=False) 
    entries_url = models.CharField(max_length=150) 

    class Meta: 
     ordering = ('id',) 

class Classes(models.Model): 
    nr = models.CharField(max_length=100) 

serializers.py

class ClassesSerializer(serializers.ModelSerializer): 
    class = serializers.StringRelatedField(many=True) 

    class Meta: 
     model = Classes 
     fields = ('classes') 
+0

你的模型是什麼樣的? –

+0

作爲輸出你期望什麼? –

+0

更新了糟糕的模型/序列化器。埃文斯:輸出是我第一次發佈(JSON) – CareFree

回答

3

你的數據庫需要保持你的表之間的關係。您可以在這裏使用一個foreign key

class Class(models.Model): 
    id = models.CharField(max_length=10) 
    starts_on = models.DateTimeField(auto_now_add=False) 
    ends_on = models.DateTimeField(auto_now_add=False) 
    entries_url = models.CharField(max_length=150) 
    related_classes = models.ForeignKey('Classes', on_delete=models.CASCADE, related_name='classes') 

    class Meta: 
     ordering = ('id',) 

class Classes(models.Model): 
    nr = models.CharField(max_length=100) 

然後,你的串行變成:

class ClassSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Class 
     fields = ['__all__'] 

class ClassesSerializer(serializers.ModelSerializer): 
    classes = ClassSerializer(many=True) 

    class Meta: 
     model = Classes 
     fields = ('classes',) 

另外,我強烈建議您不要使用class你的變量,因爲它與Python的class關鍵字相撞。

+0

我想我應該讓你知道我也使用POST操作來填充數據庫。上面的代碼看起來很有希望,但是當然我創建了一個新的數據庫,當我嘗試向它添加數據時,我得到「related_classes」:[ 「此字段是必需的。」如果我在該領域提交任何內容,它不會識別PK – CareFree

+1

您必須使用'PrimaryKeyRelatedField'序列化該字段。看看[docs](http://www.django-rest-framework.org/api-guide/relations/#primarykeyrelatedfield)就可以開始使用了。 – martinarroyo