Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tastypie django,缺少列_Django_Tastypie - Fatal编程技术网

Tastypie 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

因此,我尝试与我的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.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在此处阅读答案:-确保您理解允许跨源访问的含义。