问题描述
我最近将 Django 升级到 3.1.5,将 DRF 升级到 3.12.2,但我的应用程序中的某些内容停止工作。
我的模型和序列化程序(简化)中有以下结构:
型号:
class A(models.Model):
name = models.CharField(max_length=50)
class B(models.Model):
a = models.ForeignKey(A,on_delete=models.CASCADE)
class C(models.Model):
b = models.ForeignKey(B,on_delete=models.CASCADE)
class D(models.Model):
c = models.ForeignKey(C,on_delete=models.CASCADE)
name = models.CharField(max_length=50)
items = models.ManyToManyField(Item,blank=True)
class Item(models.Model):
name = models.CharField(max_length=50)
序列化器:
class DSerializer(serializers.ModelSerializer):
class Meta:
model = models.D
fields = ('name','items')
class CSerializer(serializers.ModelSerializer):
d_set = DSerializer(many=True,read_only=False)
class Meta:
model = models.C
fields = ('d_set',)
class BSerializer(serializers.ModelSerializer):
c_set = CSerializer(many=True,read_only=False)
class Meta:
model = models.B
fields = ('c_set',)
class ASerializer(serializers.ModelSerializer):
b_set = BSerializer(many=True,read_only=False)
class Meta:
model = models.A
fields = ('name','b_set')
def createD(d_set,c):
for d in d_set:
items = d.pop('items')
newD = models.D(c=c,**d)
newD.save()
for item in items:
newD.add(item)
def createB(self,b_set,a):
for b in b_set:
newB = models.B(a = a)
newB.save()
c_set = b.get("c_set")
for c in c_set:
d_set = c.pop("d_set")
newC = models.C(b = b,**c)
newC.save()
self.createD(d_set,c)
def create(self,validated_data):
b_set = validated_data.pop('b_set')
newA = models.A(**validated_data)
newA.save();
self.createB(b_set,newA)
问题是 createD() 中的 d.items 是空的,即使在序列化程序中传递数据也是如此。通过我的调试,发现在createB()中遍历c_set时,OrderedDict变空了。 这在 Django 2.2 和 DRF 3.11.x 中肯定运行良好
有其他人遇到过这个问题吗?
感谢您的帮助
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)