Tastypie django,缺少列
因此,我尝试与我的TastypieDjangoAPI交互。我在django中创建了以下模型:Tastypie django,缺少列,django,tastypie,Django,Tastypie,因此,我尝试与我的TastypieDjangoAPI交互。我在django中创建了以下模型: #/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
#/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)
以及下列资源:
#/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'])
现在,我想用以下命令填充项目资源:
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/
但我收到一条错误消息:
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\u id的列?我如何实现它?我是不是离目标太远了?非常感谢大家的帮助 在将
用户
外键
添加到项目
模型之前,您很可能运行了同步数据库
,因此用户id
列(代表外键
)不存在
如果您仍在开发,不关心数据库中的数据,只需删除数据库文件并再次运行syncdb
。如果您确实关心数据,请查看数据迁移
这个问题与API无关,如果打开Django admin,也会出现同样的错误。谢谢!很遗憾,我刚收到一条新的错误消息,也许你也能帮我解决这个问题“错误消息”:“photod_project.user_id可能不为空”,@BAYELK您是否调用了用户创建的用户字段
?试着提交,而不是用户
。也许我可以大胆地再问一个问题,现在它与curl一起工作了,我试着从我的前端(角度)返回$http({method:'GET',url:'',//})执行一个模拟请求;我在控制台中得到了这个消息:XMLHttpRequest无法加载。请求的资源上不存在“Access Control Allow Origin”标头。因此不允许访问源“”。@BAYELK在此处阅读答案:-确保您理解允许跨源访问的含义。