免责声明:我正在学习Django,因为我将其应用于继承的数据库/ PHP应用程序。数据库有点混乱,没有外键约束,并且命名不一致。我不想触摸或重做数据库上的任何内容,因为我根本不想与旧版应用程序打交道。
堆栈:Python 2.7。Django 1.5,Django Rest框架
问题是我有一个关系,其中有一个具有多个股票行情的想法。tickers表具有该构想的外键(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请求适用于想法,其中代码是一个子元素。因此,我收到一个例外,即未在思想中定义股票行情。很好-我只是在猜测如何设置它-我在研究文档和源代码-但希望有人可以帮助我。
谢谢
正如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',
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句