gpt4 book ai didi

python - Django TastyPie ToManyField 关系提示 "has no data and doesn' t 允许空值”在新项目的 POST 上

转载 作者:太空宇宙 更新时间:2023-11-03 18:29:37 25 4
gpt4 key购买 nike

在我的应用程序中,我有“评论”(实际上不完全是,但这是一种简单的思考方式),其他用户可以对评论进行投票(目前,这只是一个简单的模型,用户只需添加+1,或删除它,就像 Facebook 的“赞”或 Google Plus +1)。

我的 Django 模型看起来像这样(在相关部分)。

class CommentaryEntry(models.Model):
commentary = models.TextField(null=False)
section = models.ForeignKey(Section)
user = models.ForeignKey(User)
creation_date = models.DateTimeField(default=now)
votes = models.IntegerField(default=0)
class Meta:
ordering = ['-votes', 'creation_date']

class CommentaryEntryVoter(models.Model):
entry = models.ForeignKey(CommentaryEntry)
voter = models.ForeignKey(User)
vote_date = models.DateTimeField(default=now)
class Meta:
unique_together = ('entry', 'voter')

CommentaryEntry 中的“投票”字段是一个简单的递增整数,在未来的迭代中可能会被 CommentaryEntryVoters 的简单计数所取代(即一旦我解决了这个问题)。

这两个对象都是通过 TastyPie API 创建和销毁的。

在我的美味馅饼 apis.py 中,资源如下所示;

class CommentaryEntryResource(ModelResource):
section = fields.ForeignKey(SectionResource, 'section', related_name='user_commentaries')
user = fields.ForeignKey(UserResource, 'user')
voters = fields.ToManyField(CommentaryEntryVoterResource, 'commentaryentryvoter_set', related_name='entry')

class Meta:
queryset = CommentaryEntry.objects.all()
resource_name = 'sourcecommentary'
list_allowed_methods = ['get', 'put', 'post', 'delete']
authentication = SessionAuthentication()
authorization = UpdateUserObjectsOnlyAuthorization()
filtering = {
'section': ALL_WITH_RELATIONS,
'user': ALL_WITH_RELATIONS,
'voters': ALL_WITH_RELATIONS,
}

class CommentaryEntryVoterResource(ModelResource):
voter = fields.ForeignKey('decommentariis.api.UserResource', 'voter')
entry = fields.ForeignKey(CommentaryEntryResource, 'entry', related_name='voters')
class Meta:
queryset = CommentaryEntryVoter.objects.all()
resource_name = "voterhistory"
list_allowed_methods = ['get', 'post', 'delete']
authentication = SessionAuthentication()
authorization = UpdateUserObjectsOnlyAuthorization()
filtering = {
'entry': ALL_WITH_RELATIONS,
'voter': ALL_WITH_RELATIONS,
}

当我尝试发布新的 CommentaryEntryResource 时,Tasty Pie 返回 HTTP 错误 400“错误请求”,响应文本为:“‘选民’字段没有数据且不允许空值”...但是,它应该为空。这是一条新评论,尚未有任何投票者。我没有在发送到服务器的 JSON 负载中设置值。

但是,如果我重新加载,那么我可以看到 CommentaryEntry 实际上已创建,并且没有投票者,但这可能是因为在我的测试实例上我只使用 sqlite DB 并且没有要回滚的事务。

我该如何允许呢?事实上,我想强制执行它 - 新评论显然不能有任何选民。

Python 3.3、Django 1.6.2、TastyPie 0.11.0

更新:如果我将空列表添加到我的 Javascript 中的有效负载中;

var data = JSON.stringify({
"commentary": commentarytext,
/* omitted for brevity */
"voters": [],
});

然后就可以发布了。但我仍然想了解如何允许/强制执行空列表。

最佳答案

对您的voters 字段使用属性null = True。谢谢!

关于python - Django TastyPie ToManyField 关系提示 "has no data and doesn' t 允许空值”在新项目的 POST 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22575585/

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