Как создать новый ресурс с помощью внешнего ключа в TastyPie - программирование
Подтвердить что ты не робот

Как создать новый ресурс с помощью внешнего ключа в TastyPie

Я все еще новичок в tastypie, но это кажется действительно аккуратной библиотекой. К сожалению, у меня с этим возникают трудности.

У меня есть две модели и два ресурса, связанные с этими моделями:

class Container(models.Model):
    pass

class ContainerItem(models.Model):
    blog = models.ForeignKey('Container', related_name='items')

# For testing purposes only
class ContainerResource(ModelResource):
    class Meta:
        queryset = Container.objects.all()
        authorization = Authorization()

class ContainerItemResource(ModelResource):
    class Meta:
        queryset = ContainerItem.objects.all()
        authorization = Authorization()

Я создал объект Container через jQuery:

var data = JSON.stringify({});

$.ajax({
    url: 'http://localhost:8000/api/v1/container/',
    type: 'POST',
    contentType: 'application/json',
    data: data,
    dataType: 'json',
    processData: false
});

Однако, когда я иду создать ContainerItem, я получаю эту ошибку:

container_id may not be NULL

Итак, мой вопрос: Как создать новый ресурс, когда есть отношение ForeignKey?

4b9b3361

Ответ 1

Отношения ForeignKey автоматически не отображаются на ModelResource. Вам нужно будет указать:

blog = tastypie.fields.ForeignKey(ContainerResource, 'blog')

на ContainerItemResource, а затем вы можете опубликовать ресурс uri контейнера при отправке содержимого контейнера.

var containeritemData = {"blog": "/api/v1/container/1/"}
$.ajax({
    url: 'http://localhost:8000/api/v1/containeritem/',
    type: 'POST',
    contentType: 'application/json',
    data: containeritemData,
    dataType: 'json',
    processData: false
});

Для получения дополнительной информации ознакомьтесь с этими ссылками:

В этом разделе приведен пример создания основных ресурсов. В нижней части они отмечают, что поля отношений не создаются автоматически путем самоанализа:

http://django-tastypie.readthedocs.org/en/latest/tutorial.html#creating-resources

Здесь они добавляют пример создания поля отношений:

http://django-tastypie.readthedocs.org/en/latest/tutorial.html#creating-more-resources

Вот пример добавления обратных отношений:

http://django-tastypie.readthedocs.org/en/latest/resources.html#reverse-relationships

Все документы хороши, если вы читаете их как роман, но их сложно найти среди них.