在django-rest-framework中创建休息api与关系 [英] create a rest api in django-rest-framework with relation

查看:179
本文介绍了在django-rest-framework中创建休息api与关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在django-rest-framework中创建休息api $ /

我有2个表



拳头表:用户

  id | PK 
名称| varchar(255)

第二表:地址

  id | PK 
地址| varchar(255)
city_id | int
user_id | FK

现在,当我用户命中查询时,我也希望以Json格式使用用户地址



像这样

  [
{
id: 98,
name:rijoj@selectsourceintl.com,

address:[
{
id:51,
city_id:5,
addrss:纽约,
},
{
id:61,
city_id
addrss:California,
},
]
}
]


解决方案

models.py -

  class User(models.Model):
catcher_fname = models.CharField(max_length = 128,blank = True)
catcher_lname = models.CharField(max_length = 128,blank = True)
api_key = models.CharField(max_length = 100,blank = False)



class地址(models.Model):
address = models.CharField(max_length = 150)
city = models.Ch arField(max_length = 255)
user = models.ForeignKey(User,on_delete = models.CASCADE,related_name ='addresses')

注意 - id字段是自动增量和内置django,您不需要直接指定。
以下是演示如何链接您的用户obj和地址obj。

 >>来自.models import User,Address 
>> user_obj = User.objects.get(pk = pk)
>> address_obj = Address.objects.get(pk = address_pk)
>> user_obj.address = address_obj
>> user_obj.save()

稍后,您可以从用户对象访问地址,如 -

 >>来自.models import User 
>> user_obj = User.objects.get(pk = pk)
>> user_obj.addresses.all()(将给出数据)

现在安装django-restframework



views.py -

  from rest_framework.generics import RetrieveAPIView 
from .serializers import UserDetailSerializer


class UserAPIView(RetrieveAPIView):
serializer_class = UserDetailSerializer
lookup_field = 'id'
queryset = User.objects.all()

序列化程序。从

  from .models import User,Address 
from rest_framework import serializers


class AddressSerializer(serializers.ModelSerializer):
class Meta:
model = Address
fields =('id','city_id','address')

class UserDetailSerializer(serializers.ModelSerializer):
address = AddressSerializer(many = True)
class Meta:
model = Use r
fields =(
'id',
'name',
'address'

urls.py

  django.conf.urls import url 
$ b来自reports.views import import UserAPIView

urlpatterns = [
url(r'^ users /(?P< id> 0-9] +)/ $',UserAPIView.as_view(),name ='users'),
]


create a rest api in django-rest-framework

I have 2 tables

Fist table: User

id   | PK
Name | varchar(255)

Second table: address

id      | PK
address | varchar(255)
city_id | int
user_id | FK

Now when i hit query on User I also want user address in Json format

Like this

[
  {
    "id": 98,
    "name": "rijoj@selectsourceintl.com",

    "address": [
      {
        "id": 51,
        "city_id": 5,
        "addrss": "New York",
      },
      {
        "id": 61,
        "city_id": 5,
        "addrss": "California",
      },
    ]
  }
]

解决方案

models.py-

class User(models.Model):
    catcher_fname = models.CharField(max_length = 128, blank = True)
    catcher_lname = models.CharField(max_length = 128, blank = True)
    api_key = models.CharField(max_length = 100, blank = False)



class Address (models.Model):
    address = models.CharField(max_length = 150)
    city = models.CharField(max_length = 255)
    user = models.ForeignKey(User,on_delete=models.CASCADE,related_name='addresses')

Note - id field is autoincrementing and in-built in django, you don't need to specify it directly. Following is a demonstration how should you link your user obj and address obj.

>> from .models import User,Address
>> user_obj = User.objects.get(pk=pk)
>> address_obj = Address.objects.get(pk=address_pk)
>> user_obj.address = address_obj
>> user_obj.save()

Later you can access the address from the user object as -

>> from .models import User
>> user_obj = User.objects.get(pk=pk)
>> user_obj.addresses.all() (will give the data)

Now install django-restframework

views.py -

from rest_framework.generics import RetrieveAPIView
from .serializers import UserDetailSerializer


class UserAPIView(RetrieveAPIView):
      serializer_class = UserDetailSerializer
      lookup_field = 'id'
      queryset = User.objects.all()

serializers.py -

from .models import User,Address
from rest_framework import serializers


class AddressSerializer(serializers.ModelSerializer):
    class Meta:
        model = Address
        fields = ('id', 'city_id', 'address')

class UserDetailSerializer(serializers.ModelSerializer):
    address = AddressSerializer(many=True)
    class Meta:
           model = User
           fields = (
              'id',
              'name',
              'address'
           )

urls.py

from django.conf.urls import url

from reports.views import UserAPIView

urlpatterns = [
    url(r'^users/(?P<id>[0-9]+)/$',UserAPIView.as_view(), name= 'users'),
]

这篇关于在django-rest-framework中创建休息api与关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆