トピック:
1は、ビューおよび研究ツールListAPIViewビュークラスは、自動車の資源のインタフェースこのクラスの継承完全な自動車のリソース・グループの検索は、画像リソースを持っているインタフェース画像リソースの値を確認する必要があります
2、GenericViewSetの研究ツール、完全な自動車のリソースクラス継承シングル捜査、調査グループ、テンジン、単一の変更、削除、単一のインタフェース
urls.py
from . import views
from django.conf.urls import url
urlpatterns = [
url(r'^v2/Cars/$', views.CarViewList.as_view()),
url(r'^v3/Cars/$', views.CarViewGenericViewSet.as_view({'get': 'list'})),
url(r'^v3/Cars/(?P<pk>\d+)$', views.CarViewGenericViewSet.as_view(
{'get': 'retrieve', 'post': 'create', 'put': 'update', 'patch': 'partial_update', 'delete': 'destroy'})),
]
views.py
class CarViewList(ListAPIView):
serializer_class = serializers.CarModelSrealizer
queryset = models.Car.objects.filter(is_delete=False).all()
lookup_url_kwarg = 'pk'
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
class CarViewGenericViewSet(GenericViewSet, ListModelMixin, RetrieveModelMixin, CreateModelMixin, UpdateModelMixin,
DestroyModelMixin):
serializer_class = serializers.CarModelSrealizer
queryset = models.Car.objects.filter(is_delete=False).all()
lookup_url_kwarg = 'pk'
models.py
from django.db import models
# 汽车表、汽车商家表、赞助商表、赞助商详情表
class BaseModel(models.Model):
is_delete = models.BooleanField(default=False)
createdTime = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
class Car(BaseModel):
name = models.CharField(max_length=64)
price = models.DecimalField(max_digits=10, decimal_places=2)
image = models.ImageField(upload_to='img', default='media/img/default.png')
brand = models.ForeignKey(to='Brand', db_constraint=False, null=True, on_delete=models.SET_NULL, related_name='cars')
sponsors = models.ManyToManyField(to='Sponsor', db_constraint=False, related_name='cars')
@property
def brand_name(self):
return self.brand.name
@property
def sponsor_list(self):
sponsor_list_temp = []
for sponsor in self.sponsors.all():
sponsor_dic = {
'name': sponsor.name
}
try:
sponsor_dic['phone'] = sponsor.detail.phone
except:
sponsor_dic['phone'] = '未知'
sponsor_list_temp.append(sponsor_dic)
return sponsor_list_temp
class Meta:
verbose_name_plural = '汽车'
def __str__(self):
return self.name
class Brand(BaseModel):
name = models.CharField(max_length=64)
class Meta:
verbose_name_plural = '品牌'
def __str__(self):
return self.name
class Sponsor(BaseModel):
name = models.CharField(max_length=64)
@property
def phone(self):
try:
return self.detail.phone
except:
return "无"
class Meta:
verbose_name_plural = '赞助商'
def __str__(self):
return self.name
class SponsorDetail(BaseModel):
phone = models.CharField(max_length=11)
sponsor = models.OneToOneField(to=Sponsor, db_constraint=False, on_delete=models.CASCADE, related_name='detail')
class Meta:
verbose_name_plural = '赞助商详情'
def __str__(self):
try: # 连表可能会出现问题,所以要异常处理
return self.sponsor.name + '的详情'
except:
return super().__str__()
トピック:
1は、ビューおよび研究ツールListAPIViewビュークラスは、自動車の資源のインタフェースこのクラスの継承完全な自動車のリソース・グループの検索は、画像リソースを持っているインタフェース画像リソースの値を確認する必要があります
2、GenericViewSetの研究ツール、完全な自動車のリソースクラス継承シングル捜査、調査グループ、テンジン、単一の変更、削除、単一のインタフェース
urls.py
from . import views
from django.conf.urls import url
urlpatterns = [
url(r'^v2/Cars/$', views.CarViewList.as_view()),
url(r'^v3/Cars/$', views.CarViewGenericViewSet.as_view({'get': 'list'})),
url(r'^v3/Cars/(?P<pk>\d+)$', views.CarViewGenericViewSet.as_view(
{'get': 'retrieve', 'post': 'create', 'put': 'update', 'patch': 'partial_update', 'delete': 'destroy'})),
]
views.py
class CarViewList(ListAPIView):
serializer_class = serializers.CarModelSrealizer
queryset = models.Car.objects.filter(is_delete=False).all()
lookup_url_kwarg = 'pk'
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
class CarViewGenericViewSet(GenericViewSet, ListModelMixin, RetrieveModelMixin, CreateModelMixin, UpdateModelMixin,
DestroyModelMixin):
serializer_class = serializers.CarModelSrealizer
queryset = models.Car.objects.filter(is_delete=False).all()
lookup_url_kwarg = 'pk'