Я работаю над API CRUD в Django, и мне нужно сериализовать модель, которая имеет внешние ключи в двух таблицах. Модель находится на стороне «много» на двух отношениях «один ко многим», и я не вижу другого способа определения отношений в этой модели (я новичок в python и Django, и я использую Django-Rest-Framework для создания API)DRF - Сериализация модели с несколькими внешними ключами
Итак, у меня есть два вопроса:
1 - Is it a good Idea to have multiple foreign keys in my model or I should refractor my relationships some other way?
2 - If it is fine to have multiple foreign keys in a single model, how do I serialize the model to return the proper JSON?
Мои модели являются чем-то вроде этого (еще с несколькими полями):
class DataSource(models.Model):
datasource_name = models.CharField(max_length=50, unique=True)
datasource_description = models.CharField(max_length=100)
...
class Campaign(models.Model):
name = models.CharField(max_length=200)
subject = models.CharField(max_length=200)
sender = models.EmailField(max_length=200)
...
class CampaignDeliveries(models.Model):
campaign_id = models.ForeignKey(Campaign)
datasource_id = models.ForeignKey(DataSource)
delivery_reference_id = models.CharField(max_length=200, primary_key=True)
date_sent = models.DateTimeField()
В записи поставки имеется ссылка на кампанию, для которой была произведена поставка, и источник данных, который был выбран для этой доставки.
Данные должны быть возвращены в таком формате, как:
{
campaign_id: 001,
datasource_id: 002,
datasource_name: "Data Source Name",
campaign_name: "Campaign Name"
setup_date:"<Setup Date>",
delivery_history:[{
delivery_reference_id:DL_001,
sender : "[email protected]",
subject : "Subject",
sent_on : "<Date>"
},
{
delivery_reference_id:DL_002,
sender : "[email protected]",
subject : "Subject",
sent_on : "<Date>"
},
{
delivery_reference_id:DL_003,
sender : "[email protected]",
subject : "Subject",
sent_on : "<Date>"
}
....
]
}
datasource_id
и campaign_id
поля являются идентификатор по умолчанию задается Джанго к записям в то время как они были созданы и delivery_reference_id
является заказным идентификатором, который присваивается время создавая запись о доставке.
Надеюсь, что я все понял. Однако, пожалуйста, спросите, не ясно ли что-то.
Попробуйте это: http://www.django-rest-framework.org/api-guide/relations/#nested-relationships – Amar
Что вы запрашиваете для получения данных. Можете ли вы поделиться моделью, которая заполняет delivery_history –
Какие рамки вы используете для DRF? – marin