首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tastypie django,失踪列

Tastypie django,失踪列
EN

Stack Overflow用户
提问于 2014-05-28 06:09:43
回答 1查看 428关注 0票数 0

因此,我试图与我的tastypie api进行交互。我在django中创建了以下模型:

代码语言:javascript
复制
#/models.py
from django.db import models
from tastypie.utils.timezone import now
from django.contrib.auth.models import User

class Project(models.Model):
  user = models.ForeignKey(User)
  name = models.CharField(max_length=200)
  pub_date = models.DateTimeField(default=now)
  def __unicode__(self):
    return self.name

class ProjectImage(models.Model):
  Project = models.ForeignKey(Project)
  Photo = models.FileField(upload_to = 'images') 
  PhotoName = models.CharField(max_length=200)

和下列资源:

代码语言:javascript
复制
#/api.py
from tastypie.resources import ModelResource
from photod.models import Project
from tastypie.authorization import DjangoAuthorization,Authorization
from tastypie.authentication import BasicAuthentication
from django.contrib.auth.models import User
from tastypie import fields
from tastypie.serializers import Serializer

# We need a User resource as it is a required field on the project model.
class UserResource(ModelResource):
 class Meta:
    queryset = User.objects.all()
    resource_name = 'user'
    excludes = ['email', 'password', 'is_active', 'is_staff', 'is_superuser'] 
    authorization = Authorization()
    serializer = Serializer(formats=['json', 'jsonp'])

class ProjectResource(ModelResource):
user = fields.ToOneField( UserResource, 'created_by_user', full = True )
class Meta:
    queryset = Project.objects.all()
    resource_name = 'project' 
    authorization = Authorization()
    serializer = Serializer(formats=['json', 'jsonp'])

现在,我希望使用以下命令填充项目资源:

代码语言:javascript
复制
 curl --dump-header - -H "Content-Type: application/json" -X POST --data '{"name": "The first proj", "pub_date": "2011-05-22T00:46:38", "user": "/api/v1/user/1/"}' http://localhost:1337/api/v1/project/

但我得到了这样一条错误消息:

代码语言:javascript
复制
HTTP/1.0 500 INTERNAL SERVER ERROR
Date: Wed, 28 May 2014 05:47:29 GMT
Server: WSGIServer/0.1 Python/2.7.3
X-Frame-Options: SAMEORIGIN
Content-Type: application/json

{"error_message": "table photod_project has no column named user_id", "traceback":
"Traceback (most recent call last):\n\n  File \"/usr/local/lib/python2.7/dist-packages/tastypie/resources.py\", line 195, in wrapper\n    
response = callback(request, *args, **kwargs)\n\n  
File \"/usr/local/lib/python2.7/dist-packages/tastypie/resources.py\", line 426, in dispatch_list\n    return self.dispatch('list', request, **kwargs)\n\n  
File \"/usr/local/lib/python2.7/dist-packages/tastypie/resources.py\", line 458, in dispatch\n    response = method(request, **kwargs)\n\n  
File \"/usr/local/lib/python2.7/dist-packages/tastypie/resources.py\", line 1320, in post_list\n    updated_bundle = self.obj_create(bundle, **self.remove_api_resource_names(kwargs))\n\n  
File \"/usr/local/lib/python2.7/dist-packages/tastypie/resources.py\", line 2084, in obj_create\n    return self.save(bundle)\n\n  
File \"/usr/local/lib/python2.7/dist-packages/tastypie/resources.py\", line 2230, in save\n    bundle.obj.save()\n\n  
File \"/usr/local/lib/python2.7/dist-packages/django/db/models/base.py\", line 545, in save\n    force_update=force_update, update_fields=update_fields)\n\n  
File \"/usr/local/lib/python2.7/dist-packages/django/db/models/base.py\", line 573, in save_base\n    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)\n\n  
File \"/usr/local/lib/python2.7/dist-packages/django/db/models/base.py\", line 654, in _save_table\n    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)\n\n  
File \"/usr/local/lib/python2.7/dist-packages/django/db/models/base.py\", line 687, in _do_insert\n    using=using, raw=raw)\n\n  
File \"/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py\", line 232, in _insert\n    return insert_query(self.model, objs, fields, **kwargs)\n\n  
File \"/usr/local/lib/python2.7/dist-packages/django/db/models/query.py\", line 1514, in insert_query\n    return query.get_compiler(using=using).execute_sql(return_id)\n\n  File \"/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py\", line 903, in execute_sql\n    cursor.execute(sql, params)\n\n  
File \"/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py\", line 69, in execute\n    return super(CursorDebugWrapper, self).execute(sql, params)\n\n  
File \"/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py\", line 53, in execute\n    return self.cursor.execute(sql, params)\n\n  
File \"/usr/local/lib/python2.7/dist-packages/django/db/utils.py\", line 99, in __exit__\n    six.reraise(dj_exc_type, dj_exc_value, traceback)\n\n  
File \"/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py\", line 53, in execute\n    return self.cursor.execute(sql, params)\n\n 
File \"/usr/local/lib/python2.7/dist-packages/django/db/backends/sqlite3/base.py\", line 451, in execute\n    return Database.Cursor.execute(self, query, params)\n\nOperationalError: 
table photod_project has no column named user_id\n"}

怎么啦?为什么我需要一个名叫user_id的colum?我如何实现它?我在这里只是个标志吗?所有的帮助都非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-28 08:47:28

您很可能在将user ForeignKey添加到Project模型之前运行了Project,因此user_id列(表示ForeignKey)不存在。

如果您仍然在开发并且不关心数据库中的数据,只需删除数据库文件并再次运行syncdb即可。如果您确实关心数据,请查看south进行数据迁移。

这个问题与API无关,如果您打开Django管理程序,您将得到相同的错误。

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

https://stackoverflow.com/questions/23903981

复制
相关文章

相似问题

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