Tastypie POST总是创建资源

时间:2012-08-18 10:08:52

标签: python django api tastypie

我正在使用Tastypie构建API。

我创建了一个资源,但出于某种原因,每当我发出POST请求时,它总是会创建一个资源,即使它返回时也有错误。

例如,我收到以下错误:

  

'authors'字段没有数据,也不允许空值

但是,当我在管理控制台中检查资源时,它会显示它创建了资源,只是将“authors”字段设置为空白。

如果参数丢失,我需要POST请求失败并且不创建资源。

默认情况下,模型中的所有字段均为空= False,null = False。

修改

这是我正在使用的模型:

class Story(models.Model):
  title = models.CharField(max_length=50)
  authors = models.ManyToManyField(Author, related_name='stories')
  cover_photo_url = models.URLField(max_length = 200)

这是我的资源:

class StoryResource(ModelResource):
  authors = fields.ToManyField(SimpleAuthorResource, 'authors', full=True)
  posts = fields.ToManyField(PostResource, 'posts', full=True, blank=True)
  class Meta:
    queryset = Story.objects.all()
    resource_name = 'story'
    authorization = Authorization()
  def determine_format(self, request):
    return "application/json"

我正在提出以下要求:

curl -X POST --header "Content-type:application/json" 
     --data '{"title" : "cool new story", "cover_photo_url":"hello.png"}' 
     http://localhost:8000/api/v1/story/

现在我一直在尝试其他一些事情。包括验证和那引起了一系列问题。 即使没有验证,如果我尝试使用缺少的必需参数进行POST,那么行插入是否会失败?

1 个答案:

答案 0 :(得分:-1)

默认情况下,所有模型都为空= False。 您必须专门为作者模型添加blank = True,以便API忽略空白作者。 另一种选择是让一个默认的作者填充作者字段,然后你不必担心它不是空白。