更新了问题
我能够让它工作并更新下面的代码。但现在我的问题是如何编辑iceinfo
中的字段?现在它以IceInfo object
而不是可编辑字段的形式返回。我只能修改ice_code
和ice_maker
。
旧问题
我正在尝试为我们的数据库构建API。数据库中的信息在多个表之间划分,所有表都与主键具有相同的“Ice-code
”。
我一直在尝试将一周的大部分时间用于组合表格,以便我可以从一个网址(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"
},
答案 0 :(得分:0)
假设您的目标是序列化许多IceInfo实例,IceList的目的是什么?或者你在尝试不同的东西? Rest框架将多个对象序列化到列表中没有问题。
您可以通过将查询集传递给序列化程序来实现,并给出关键字many = True。看这里: documentation
结果会是这样的
queryset = IceInfoSerializer(IceInfo.objects.all(), many=True)
。
关于新问题,您应该可以从查询集中编辑它们。你都尝试了些什么? (你可能最好在新问题上开一个新主题)
此外,您发布的JSON似乎无效,是否可以检查您是否正确复制粘贴它?