gpt4 book ai didi

json - depth = 1 无法正常工作,它在 Django Rest Framework 的 ManyToManyField 和 ForeignKey 字段中保存 Null

转载 作者:行者123 更新时间:2023-12-02 17:31:48 24 4
gpt4 key购买 nike

添加 depth = 1 后无法正常工作

=> 模型.py 文件

class State(models.Model):
state_name = models.CharField(max_length = 30, unique=True)

def __unicode__(self):
return str(self.state_name)

class City(models.Model):
state = models.ForeignKey(State, related_name='state_city')
city_name = models.CharField(max_length = 30)

def __unicode__(self):
return str(self.city_name)

class Meta:
ordering = ('city_name',)
unique_together = ('state', 'city_name',)

class Snippet(models.Model):
created = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=100, blank=True, default='')
code = models.TextField()
linenos = models.BooleanField(default=False)
owner = models.ForeignKey('auth.User', related_name='snippets')
state = models.ForeignKey(State,blank=True,null=True)
city = models.ManyToManyField(City)

=> serializers.py 文件

class StateSerializer(serializers.ModelSerializer):
class Meta:
model = State

class CitySerializer(serializers.ModelSerializer):
state_name = serializers.CharField(source='state.state_name', read_only=True)
class Meta:
model = City

class SnippetSerializer(serializers.ModelSerializer):
owner = serializers.ReadOnlyField(source='owner.username', read_only=True)
class Meta:
model = Snippet
fields = ('id', 'title', 'code', 'linenos', 'owner', 'state', 'city')
depth = 1

我分别在 state 和 city 添加了 ForeignKey 和 ManyToManyField 字段。它不在 SnippetSerializer 中保存值,而在 Meta Class 中添加 depth = 1(它在州和城市字段中保存 Null 值)。当我添加 depth = 1 JSON 时,它应该显示相关字段,但在添加新代码段时它无法正常工作。没有 depth = 1 它工作正常。我有一个复杂的数据库,其中的表有许多 ManyToMany 和 ForeignKey 相关字段。请给我建议,以便我可以获取 JSON 中的相关数据。

我有 djangorestframework-3.1.2 版本。我也使用过最新版本但同样的问题。请给我解决方案并提前致谢。

最佳答案

我遇到了同样的问题并设法解决了。由于问题出在 depth 上,我只是在 init 方法中更改深度值。

class SnippetSerializer(serializers.ModelSerializer):
owner = serializers.ReadOnlyField(source='owner.username', read_only=True)
class Meta:
model = Snippet
fields = ('id', 'title', 'code', 'linenos', 'owner', 'state', 'city')
depth = 1

def __init__(self, *args, **kwargs):
super(SnippetSerializer, self).__init__(*args, **kwargs)
request = self.context.get('request')
if request and request.method=='POST':
self.Meta.depth = 0
else:
self.Meta.depth = 1

在上面的代码中,我根据发出的请求类型动态更改了depth

但是,这是我自己找到的解决方法,我不确定这是否是最佳做法,但它只需稍作修改就可以解决问题。

关于json - depth = 1 无法正常工作,它在 Django Rest Framework 的 ManyToManyField 和 ForeignKey 字段中保存 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32202824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com