Python Django REST框架及其组合模型

Python Django REST框架及其组合模型,python,django,django-rest-framework,Python,Django,Django Rest Framework,更新的问题 "results": [ { "ice_code": 1, "iceinfo": [ { ice_name": "Ice Name 1" } ) "ice_maker": "Ice Maker 1" }, { "ice_code": 2, "iceinfo": [ {

更新的问题

"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"

        },
我能够让它工作,并更新了下面的代码。但是现在我的问题是如何编辑
iceinfo
中的字段?现在它作为
IceInfo对象返回,而不是作为可编辑字段返回。我只能编辑
ice\u代码
ice\u生成器

老问题

"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"

        },
我正在尝试为我们的数据库构建一个API。数据库中的信息分为多个表,所有表的主键都是相同的“
Ice code

我已经尝试了一个星期的大部分时间来合并这些表,这样我可以从一个url(
api.something.com/ice/
)看到ice的列表,从(
api.something.com/ice/1
)看到ice的详细视图,将所有表中的信息合并在一起

似乎无论我怎么尝试,我都无法组合表格

这是我到目前为止所得到的东西的草稿。我希望最终能够从前端更新字段。每个表的总行数大约在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
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')
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']
#serializers.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
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')
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']
#views.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
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')
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"

        },

假设您的目标是序列化许多IceInfo实例,那么IceList的用途是什么?还是你在尝试不同的东西?Rest框架可以将多个对象序列化到一个列表中

您可以通过将queryset传递给序列化程序并给出关键字many=True来实现这一点。请看这里:

结果会是这样
queryset=IceInfoSerializer(IceInfo.objects.all(),many=True)

关于新问题,您应该能够从查询集中编辑它们。到目前为止你试过什么?(你最好就新问题开始一个新话题)


此外,您发布的JSON似乎无效,能否检查您是否正确复制粘贴了它?

在我看来,您不需要IceListSerializer来序列化IceInfo的许多实例,只需使用many=True。你为什么需要冰激凌呢?谢谢你的回复。你能详细说明一下你使用many=True的意思吗?Ice_列表和Ice_信息表都包含更多的列,这就是为什么同时使用IceList和IceInfo的原因。假设您的目标是序列化IceInfo的许多实例,那么IceList的用途是什么?还是你在尝试不同的东西?如果我是对的,您可以通过将queryset传递给序列化程序,并给出关键字many=True来实现这一点。请看这里:我是Django Rest新手,所以我遵循了一个教程,它显示了每个模型的序列化程序,至少我是这样理解的。我的目标是简单地显示列表和ice_代码的详细视图,并在需要时进行更新。我只需要一个表/模型就可以让它正常工作,但当我必须包含另一个表时,它就会一直失败。是否应将
IceList
queryset设置为类似
queryset=IceListSerializer(IceList.objects.all(),many=True)
?尝试类似queryset=IceInfoSerializer(IceInfo.objects.all(),many=True)的设置。如果不行,请告诉我!