У меня есть два ресурса, клиент и телефон (я сделал это просто здесь, только включая несколько полей). У разных клиентов может быть один и тот же тип телефона. Я написал свой класс Modelresource и получил доступ к API через/customer/and/phone/Вложенный ресурс для многих-многих отношений в tastypie. Родительские отношения с ребенком
Теперь, что я хочу сделать, это получить телефон для определенного клиента. so/customer/1/phone/
Это то, на что похожи мои классы.
Models.py
# Defines the phone Model
class Phone(models.Model):
phone_id= models.AutoField(primary_key=True)
phone_type = models.CharField(max_length=100)
# Defines the Customer Model
class Customer(models.Model):
customer_id= models.AutoField(primary_key=True)
phone = models.ManyToManyField(Phone)
Api.py
class PhoneResource(ModelResource):
class Meta:
queryset = Phone.objects.all()
allowed_methods = ['get']
resource_name = 'phone'
class CustomerResource(ModelResource):
phone = fields.ManyToManyField(PhoneResource, "phone")
class Meta:
queryset = Customer.objects.all()
allowed_methods = ['get', 'patch', 'put']
resource_name = 'customer'
authentication = Authentication()
authorization = Authorization()
def prepend_urls(self):
return [
url(r'^(?P<resource_name>%s)/(?P<pk>\w[\w/-]*)/phone%s$' %
(self._meta.resource_name, trailing_slash()),
self.wrap_view('get_customer_phone'), name='customer_phone'),
]
def customer_phone(self, request, **kwargs):
# My Question is what goes in this function
# I want to get only the phones for the given customer, and exclude other phones that does not belong to them
Я посмотрел в http://django-tastypie.readthedocs.org/en/latest/cookbook.html#nested-resources
Но это не работает. Я все время возвращаю все телефоны, а не только тот, который принадлежит определенному клиенту. Поэтому, если у Джона был андроид и ios, он должен вернуть оба списка, но если у Джона был андроид, он должен только вернуть андроид. Но делая это, я получаю весь телефон в модели телефона.
Что 'customer_phone()' в настоящее время выглядят? –
Единственный способ заставить его работать, это создать пакет из ресурса клиента, а затем удалить все поля, кроме поля телефона, а затем вернуть его. Проблема с этим заключается в том, что я хочу/клиент вернуть ресурс телефона, как uri, и/customer/1/phone /, чтобы вернуться полностью. Но я должен либо получить как полный, либо оба, как ури. – Purpamine
Должно быть лучшее решение, чем это ... – Purpamine