Reputation: 2358
I have the following models in my Django Application. The BasicInfo and AddressInfo tables are linked to the Customer table using the id column of the Customer Table, which is the customer_id column in these tables.
For each customer, there can be multiple entries in the AddressInfo or the BasicInfo table.
class Customer(models.Model):
id = models.IntegerField(primary_key=True)
joining_dtm = models.DateTimeField()
isactive = models.IntegerField()
class Meta:
db_table = u'Customer'
class Addressinfo(models.Model):
id = models.IntegerField(primary_key=True)
apt_num = models.CharField(max_length=135, blank=True)
street = models.CharField(max_length=135, blank=True)
street_2 = models.CharField(max_length=135, blank=True)
city = models.CharField(max_length=135, blank=True)
country = models.CharField(max_length=135, blank=True)
postalcode = models.CharField(max_length=135, blank=True)
customer_id = models.ForeignKey(Customer)
class Meta:
db_table = u'AddressInfo'
class Basicinfo(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=135, blank=True)
about = models.CharField(max_length=135, blank=True)
website = models.CharField(max_length=135, blank=True)
customer_id = models.ForeignKey(Customer)
class Meta:
db_table = u'BasicInfo'
How do I create a single Tastypie resource which will enable me to provide all customer tables as an API.
The json object that the resource returns can be something similar to the following for the customer with id 12,
{
"id": 12,
"joining_dtm": "2012-10-25T07:06:54.041528",
"resource_uri": "/public-api/api/v0.1a/customer/1/",
"AddressInfo": [
{
"id":22,
"apt_num": "54",
"street": "Avondale Place",
"street_2": "",
"city": "Chicago",
"country": "India",
"postalcode": "600059",
"customer_id": 12
},
{
"id":96,
"apt_num": "11",
"street": "Infinite Loop",
"street_2": "",
"city": "Cupertino",
"country": "USA",
"postalcode": "123456",
"customer_id": 12
}
],
"BasicInfo": [
{
"id": 33,
"name": "My Full Name",
"about": "Blah Blah Blah",
"website": "http://google.com",
"customer_id": 12
},
{
"id": 147,
"name": "My New Name",
"about": "More Blah Blah",
"website": "http://gmail.com",
"customer_id": 12
}
]
}
Upvotes: 2
Views: 1294
Reputation: 47269
If you are simply asking for an API that lists all of your customers:
/public-api/api/v0.1a/customer/?format=json
Should give you that. Otherwise, below is what I assume you were asking - how to set up the resources to show basic info / address info when viewing a customer's endpoint
In your api.py:
class CustomerResource(ModelResource):
# The 2nd parameter is tricky:
# Try suffixing with nothing, 's', or '_set'
# e.g. 'addressinfo', 'addressinfos', 'addressinfo_set'
addressinfos = fields.ToManyField('your_app_name.api.AddressInfoResource', 'addressinfo_set', Full=True)
basicinfos = fields.ToManyField('your_app_name.api.BasicInfoResource', 'basicinfo_set', Full=True)
class Meta:
queryset = Customer.objects.all()
resource_name = 'customer'
class AddressInfoResource(ModelResource):
class Meta:
queryset = Addressinfo.objects.all()
resource_name = 'addressinfo'
class BasicInfoResource(ModelResource):
class Meta:
queryset = Basicinfo.objects.all()
resource_name = 'basicinfo'
And of course add authentication / authorization at each of these resources as needed.
Upvotes: 1