首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Django Tastypie用ForeignKey发布

Django Tastypie用ForeignKey发布
EN

Stack Overflow用户
提问于 2013-12-13 20:27:13
回答 2查看 399关注 0票数 0

我目前正在学习Django和Tastypie。我到处寻找答案,但似乎找不到具体解决这个问题的任何东西。

我在Tastypie中定义了三个资源:用户、搜索和评论。有许多评论供搜索。

models.py的简化查看如下:

代码语言:javascript
运行
复制
class Search(models.Model):
    search_name = models.CharField(max_length=40, unique=True)
    search_slug = models.SlugField(default='')
    search_description = models.TextField(blank=True)
    splunk_search = models.TextField()
    splunk_results = models.TextField(blank=True)

class Comment(models.Model):
    search = models.ForeignKey(Search)
    author = models.ForeignKey(User)
    comment_title = models.CharField(max_length=80)
    comment = models.TextField()

在我的api.py

代码语言:javascript
运行
复制
class UserResource(ModelResource):
    class Meta:
        queryset = User.objects.all()
        resource_name = 'user'

class SearchResource(ModelResource):
    comments = fields.ToManyField('myapp.api.CommentResource','comments', null=True, blank=True)

    class Meta:
        queryset = Search.objects.all()
        list_allowed_methods = ['get', 'post']
        detail_allowed_methods = ['get', 'post', 'put', 'delete']
        resource_name = 'search'
        serializer = urlencodeSerializer()
        authentication = Authentication()
        authorization = Authorization()

class CommentResource(ModelResource):
    search = fields.ToOneField(SearchResource, 'search')

    class Meta:
        queryset = Comment.objects.all()
        resource_name = 'comment'
        list_allowed_methods = ['get', 'post']
        detail_allowed_methods = ['get', 'post', 'put', 'delete']
        authorization = Authorization()
        authentication = Authentication()
        serializer = urlencodeSerializer()
        validation = FormValidation(form_class=CommentForm)

我在js中的提交处理程序

代码语言:javascript
运行
复制
 $.ajax({
     type: 'POST',
     url: '/api/v1/comment/',
     dataType: 'json',
     data: $("#commentForm").serialize(),
     processData: false,
     success: function(messages) {
     console.log("Success!");
   },
   error: function() {
     console.log("Oh no, something went wrong!");
   }
 });

我总是得到回复:Comment has no search.

此外,这种形式的工作方式之外,味道很好。原始django表单既排除了搜索字段,也排除了作者字段,它们的数据是预先填充的。我只是不能让同样的东西在Tastypie起作用。提前感谢您的任何建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-24 08:10:10

您使SearchResource具有comments (m2m关系),但没有在模型类Search中指定它,所以我想您使用了反向关系。

如果是这样,而不是,

代码语言:javascript
运行
复制
class SearchResource(ModelResource):
    comments = fields.ToManyField('myapp.api.CommentResource','comments', null=True, blank=True)

换到,

代码语言:javascript
运行
复制
class SearchResource(ModelResource):
    comments = fields.ToManyField('myapp.api.CommentResource', 'comment_set', related_name='search', null=True, full=True)

问题是“注释没有搜索”,因为您没有指定related_name。另一方面,类Search没有属性comments,只有comment_set (反向关系)。

票数 1
EN

Stack Overflow用户

发布于 2013-12-13 22:34:14

看起来你有一个网页,有一个表单,你正试图发送给品味。但是,您的数据是通过以下方法生成的:

代码语言:javascript
运行
复制
$("#commentForm").serialize()

这将生成URL编码的数据,但您需要发送JSON。

您需要以JSON的形式发送数据。相反,这可能会奏效:

代码语言:javascript
运行
复制
JSON.stringify($("#commentForm").serializeArray());

这可能不会直接起作用。在将serializeArray()传递到JSON.stringify()之前,您可能需要将它修改为适合tastypie的格式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20575409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档