Как вернуть индивидуальный ответ, используя django rest api - PullRequest
0 голосов
/ 13 февраля 2020

Как вложенный элемент списка? Можем ли мы использовать сериализаторы для возврата настройки, или нам нужно написать django представление для настройки вывода данных?

models.py

 class Reporter(models.Model):
    first_name  = models.CharField(max_length=30)
    last_name   = models.CharField(max_length=30)
    email       = models.EmailField()

class Article(models.Model):
    headline    = models.CharField(max_length=100)
    pub_date    = models.DateField()
    reporter    = models.ForeignKey(Reporter, on_delete=models.CASCADE)

view.py

class ReporterView(generics.ListCreateAPIView):
    queryset            =   Reporter.objects.all()
    serializer_class    =   ReportSerializer


class ArticleView(generics.ListCreateAPIView):
    queryset            =   Article.objects.all()
    serializer_class    =   ArticleSerializer

urls.py

urlpatterns = [
  path('reporter/',ReporterView.as_view(),name='reporter'),
  path('artical/',ArticleView.as_view(),name='article'),
]

Эти API возвращают данные следующим образом: для API репортер / :

[
    {
        "id": 1,
        "first_name": "Nero",
        "last_name": "Sutton",
        "email": "dugunox@mailinator.com"
    },
    {
        "id": 2,
        "first_name": "Maia",
        "last_name": "Stark",
        "email": "kacepub@mailinator.com"
    }
]

для API 'Artical /'

{
    "id": 1,
    "headline": "Consequatur",
    "pub_date": "2020-02-14",
    "reporter": {
        "id": 1,
        "first_name": "Nero",
        "last_name": "Sutton",
        "email": "dugunox@mailinator.com"
    }
},

Теперь я хочу создать новый API который может возвращать данные в следующем формате:

[
{    "first_name": "Nero",
     "email": "dugunox@mailinator.com"
     "reportinf_artical":[
             { "headline": "Consequatur1", "pub_date": "2020-02-14",},
             { "headline": "Consequatur2", "pub_date": "2020-02-14",},
             { "headline": "Consequatur3", "pub_date": "2020-02-14",},
         ]
  },
  {    "first_name": "Nero",
     "email": "dugunox@mailinator.com"
     "reportinf_artical":[
             { "headline": "Consequatur1", "pub_date": "2020-02-14",},
             { "headline": "Consequatur2", "pub_date": "2020-02-14",},
             { "headline": "Consequatur3", "pub_date": "2020-02-14",},
         ]
  },
  #and so on....
]

1 Ответ

0 голосов
/ 13 февраля 2020

Существует одно поле модели под названием ListField из модуля django_ mysql .models , которое может быть применимо для этого.

from django.db.models import Model, CharField
from django_mysql.models import ListCharField

class MyPurchase(Model):
    category = CharField(max_length=20)
    purchase_date = DateField(auto_now_add=True)
    products = ListCharField(
        base_field = CharField(max_length=100)
    )

Может выглядеть что-то в этом роде. Вы можете установить количество предметов, которые вы можете добавить к продуктам . Посмотрите его документы, если хотите прочитать дальше.

https://django-mysql.readthedocs.io/en/latest/model_fields/list_fields.html

Надеюсь, это поможет.

...