我有兩個資源,客戶和電話(我只是通過只包括幾個字段來簡化它)。不同的客戶可以擁有相同類型的電話。我寫了我的Modelresource類,並通過/ customer /和/ phone訪問API。我現在想做的是爲某個客戶獲取電話。 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
但它不工作。我一直在收回所有電話,而不僅僅是屬於某個客戶的電話。所以,如果約翰有一個android和一個ios,它應該返回這兩個列表,但如果約翰有android它應該只返回android。但是,我正在使用手機模型中的所有手機。
這是什麼'customer_phone()'目前看起來像? –
讓它工作的唯一方法是從客戶資源創建一個捆綁包,然後刪除除電話字段之外的所有字段,然後返回該捆綁。這個問題是,我想/客戶返回電話資源作爲uri,和/客戶/ 1 /電話/返回完整。但是我必須要麼兩者都是完整的,要麼兩者都是uris。 – Purpamine
必須有比這更好的解決方案... – Purpamine