我目前正在学习Django和Tastypie。我到处寻找答案,但似乎找不到具体解决这个问题的任何东西。
我在Tastypie中定义了三个资源:用户、搜索和评论。有许多评论供搜索。
对models.py的简化查看如下:
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里
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中的提交处理程序
$.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起作用。提前感谢您的任何建议。
发布于 2013-12-24 00:10:10
您使SearchResource
具有comments
(m2m关系),但没有在模型类Search
中指定它,所以我想您使用了反向关系。
如果是这样,而不是,
class SearchResource(ModelResource):
comments = fields.ToManyField('myapp.api.CommentResource','comments', null=True, blank=True)
换到,
class SearchResource(ModelResource):
comments = fields.ToManyField('myapp.api.CommentResource', 'comment_set', related_name='search', null=True, full=True)
问题是“注释没有搜索”,因为您没有指定related_name
。另一方面,类Search
没有属性comments
,只有comment_set
(反向关系)。
发布于 2013-12-13 14:34:14
看起来你有一个网页,有一个表单,你正试图发送给品味。但是,您的数据是通过以下方法生成的:
$("#commentForm").serialize()
这将生成URL编码的数据,但您需要发送JSON。
您需要以JSON的形式发送数据。相反,这可能会奏效:
JSON.stringify($("#commentForm").serializeArray());
这可能不会直接起作用。在将serializeArray()传递到JSON.stringify()之前,您可能需要将它修改为适合tastypie的格式。
https://stackoverflow.com/questions/20575409
复制相似问题