gpt4 book ai didi

Django Rest 序列化器 : Reverse relationships

转载 作者:行者123 更新时间:2023-12-02 09:38:01 24 4
gpt4 key购买 nike

免责声明:我正在学习 django,因为我将其应用于我继承的数据库/PHP 应用程序。数据库有点乱,没有外键约束,命名也不一致。我不想触摸或重做数据库上的任何内容,因为我根本不想打扰旧应用程序。

堆栈:Python 2.7。 Django 1.5,Django Rest 框架

问题是我有一个关系,其中有一个想法有多个代码。股票表有想法的外键(teaser_id),所以我们有类似的东西

**Tickers**
id teaser_id
1 1
2 1
3 1
4 2
4 2

**Ideas**
id
1
2

我让 django 从数据库生成模型,但如果没有 FK 约束,它无法正确生成所有关系。以下是模型的配置方式:

class Tickers(models.Model):
id = models.IntegerField(primary_key=True)

# I changed to this
teaser_id = models.ForeignKey(Idea)
# From
# teaser_id = models.IntegerField(null=True, blank=True)

ticker = models.CharField(max_length=135L, blank=True)
date_added = models.CharField(max_length=135L, blank=True)
class Meta:
db_table = 'teaser_tickers'


class Idea(models.Model):
id = models.IntegerField(primary_key=True)
industry_id = models.IntegerField()
post_type = models.CharField(max_length=45L)

class Meta:
db_table = 'idea'

这是我的序列化器

class TickerSerializer(serializers.HyperlinkedModelSerializer):

class Meta:
model = myModels.Tickers
fields = (
'id'
,'teaser_id'
,'ticker'
)

class IdeaSerializer(serializers.HyperlinkedModelSerializer):
user = UserSerializer(many=False, read_only=True)
ticker = TickerSerializer(many=True, read_only=True, )
teaser = myFields.TeaserField(teaser_length=200, original_field='content')

class Meta:
model = myModels.Idea
fields = (
'id'
, 'title'
, 'date_added'
, 'user'
, 'teaser'
, 'ticker'
)

我希望创意资源将代码作为子节点集返回。

REST 请求针对的是 Idea,其中代码是子元素。所以我收到一个异常,即代码未在想法中定义。很好,明白了 - 但我只是猜测此时如何设置 - 我正在浏览文档和源代码 - 但希望有人可以帮助我。

谢谢

最佳答案

正如 akaphenom 所说,你必须在序列化器中使用 related_name,但由于你没有在模型中指定任何名称,所以你必须使用默认值,在这种情况下 teaser_set 和你的 IdeaSerializer 必须是:

class IdeaSerializer(serializers.HyperlinkedModelSerializer):
user = UserSerializer(many=False, read_only=True)
tickers = ReverseTickerSerializer(many=True, read_only=True)
teaser_set = myFields.TeaserField(teaser_length=200, original_field='content')


class Meta:
model = myModels.Idea
fields = (
'id',
'title',
'date_added',
'user',
'teaser_set',
'tickers',
)

关于Django Rest 序列化器 : Reverse relationships,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19326327/

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