我能得到它的工作,並已低於更新代碼。但現在我的問題是如何編輯iceinfo
中的字段?現在,它以IceInfo object
的形式返回,而不是作爲可編輯字段。我只能編輯ice_code
和ice_maker
。
老問題
我想爲我們的數據庫的API。數據庫中的信息被劃分爲多個表格,所有表格的主鍵都與「Ice-code
」相同。
我一直在努力,現在一個星期的大部分時間將表結合起來,所以我可以從一個URL(api.something.com/ice/
)能夠看到(api.something.com/ice/1
)冰和一個列表就能看到詳細視圖的冰塊融合了所有表格的信息。
似乎無論我嘗試什麼,我都無法合併表格。
這是我到目前爲止的草稿。我希望能夠最終從前端更新字段。每張桌子的總行數在70-80k左右,他們有比這裏更多的列,但我只是想做一個粗略的工作草案。
#models.py
class IceInfo(models.Model):
ice_name = models.TextField(db_column='Ice name', blank=True, null=True)
updated = models.DateTimeField(db_column='Updated')
ice_code = models.ForeignKey(IceList, related_name='iceinfo', db_column='Ice-code', on_delete=models.CASCADE, primary_key=True)
class Meta:
managed = False
db_table = 'Ice_Info'
class IceList(models.Model):
ice_code = models.IntegerField(primary_key=True, db_column='Ice-code', max_length=10)
ice_maker = models.CharField(db_column='Ice Maker', max_length=255, blank=True, null=True)
updated = models.DateTimeField(db_column='Updated')
class Meta:
managed = False
db_table = 'Ice_List'
def __str__(self):
return self.ice_code
#serializers.py
from rest_framework import serializers
from .models import IceList, IceInfo
class IceInfoSerializer(serializers.ModelSerializer):
class Meta:
model = IceInfo
fields = '__all__'
class IceListSerializer(serializers.ModelSerializer):
iceinfo = IceInfoSerializer(many=True)
class Meta:
model = IceList
fields = ('ice_code', 'ice_maker', 'iceinfo')
#的views.py
from .models import IceInfo, IceList
from .serializers import IceListSerializer
from rest_framework.generics import ListAPIView, RetrieveAPIView, RetrieveUpdateAPIView
from rest_framework.filters import SearchFilter, OrderingFilter
class IceList(ListAPIView):
queryset = IceList.objects.all()
serializer_class = IceListSerializer
filter_backends = [SearchFilter, OrderingFilter]
search_fields = ['ice_code', 'ice_maker', 'ice_name']
個結果
"results": [
{
"ice_code": 1,
"iceinfo": [
{
ice_name": "Ice Name 1"
}
)
"ice_maker": "Ice Maker 1"
},
{
"ice_code": 2,
"iceinfo": [
{
ice_name": "Ice Name 2"
}
)
"ice_maker": "Ice Maker 2"
},
在我看來,你不需要IceListSerializer來對IceInfo的許多實例進行序列化,只需使用many = True即可。爲什麼你甚至需要IceList? –
謝謝你的回覆。你能否用許多= True來詳細說明你的意思?Ice_List和Ice_Info表都包含更多列,所以這就是爲什麼使用IceList和IceInfo的原因。 – Shopro
假設你的目標是序列化IceInfo的許多實例,IceList的目的是什麼?或者你在嘗試一些不同的東西?如果我是對的,你可以通過將查詢集傳遞給序列化程序,並給出關鍵字many = True。看到這裏: [文檔](http://www.django-rest-framework.org/tutorial/1-serialization/#working-with-serializers) –