- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有 2 个模型(RiderProfile
和 Ride
),它们具有通过中间模型(RideMembership
)管理的多对多关系>).
我希望能够将新的关系条目发布到我的 Intermediate ModelResource,但我收到一条错误消息,告诉我我为资源提供了无效的 URL。
注意有another question与此类似,但不提供 POST 数据。
这是我的模型:
class RiderProfile(models.Model):
user = models.OneToOneField(User)
age = models.IntegerField(max_length=2, null=True, blank=True)
rides = models.ManyToManyField('riderapp.Ride', through="RideMembership", null=True, blank=True)
def __unicode__(self):
return self.user.get_username()
class Ride(models.Model):
name = models.CharField(max_length=64)
riders = models.ManyToManyField(RiderProfile, through="RideMembership", null=True, blank=True)
def __unicode__(self):
return self.name
class RideMembership(models.Model):
rider = models.ForeignKey(RiderProfile)
ride = models.ForeignKey(Ride)
date_joined = models.DateField(default=datetime.now)
invite_reason = models.CharField(max_length=64)
def __unicode__(self):
return self.rider.user.get_username() + ' to ' + self.ride.name()
这是我的资源:
class UserResource(ModelResource):
...
class RiderProfileResource(ModelResource):
class Meta:
queryset = RiderProfile.objects.all()
resource_name = 'riders'
user = fields.ForeignKey(UserResource, 'user', full=True)
rides = fields.ToManyField('riderapp.api.RideForRiderProfileResource', 'rides', full=True)
class RideResource(ModelResource):
class Meta:
queryset = Ride.objects.all()
resource_name = 'rides'
authorization = Authorization()
always_return_data = True
riders = fields.ToManyField('riderapp.api.RiderProfileForRideResource', 'riders', full=True, blank=True, readonly=True)
class RideMembershipResource(ModelResource):
class Meta:
queryset = RideMembership.objects.all()
resource_name = 'rider_memberships'
authorization = Authorization()
always_return_data = True
rider = fields.ForeignKey(RideForRiderProfileResource, 'rider')
ride = fields.ForeignKey(RideResource, 'ride')
"""special ride resource for inclusion in a RiderProfile. Omits the `riders` relational field to avoid infinite recursion"""
class RideForRiderProfileResource(ModelResource):
class Meta:
queryset = Ride.objects.all()
resource_name = 'rides_for_riders'
allowed_methods = [];
""" special rider profile resource for inclusion in a Ride. Omits the `rides` relational field to avoid infinite recursion """
class RiderProfileForRideResource(ModelResource):
class Meta:
queryset = RiderProfile.objects.all()
resource_name = 'riders_for_ride'
allowed_methods = [];
user = fields.ForeignKey(UserResource, 'user', full=True)
以下是我尝试通过 POST 创建新的 RideMemebership 关系的方法:
网址:http://[...]/api/v1/rider_memberships/
数据:
{
"rider": "/api/v1/riders/1/",
"ride": "/api/v1/rides/12/",
"invite_reason": "because it's my ride!"
}
回应:
{
"error_message": "An incorrect URL was provided '/api/v1/riders/1/' for the 'RideForRiderProfileResource' resource.",
"traceback": "Traceback (most recent call last):
File \"/Library/Python/2.7/site-packages/tastypie/resources.py\", line 201, in wrapper
response = callback(request, *args, **kwargs)
File \"/Library/Python/2.7/site-packages/tastypie/resources.py\", line 432, in dispatch_list
return self.dispatch('list', request, **kwargs)
File \"/Library/Python/2.7/site-packages/tastypie/resources.py\", line 464, in dispatch
response = method(request, **kwargs)
File \"/Library/Python/2.7/site-packages/tastypie/resources.py\", line 1340, in post_list
updated_bundle = self.obj_create(bundle, **self.remove_api_resource_names(kwargs))
File \"/Library/Python/2.7/site-packages/tastypie/resources.py\", line 2103, in obj_create
bundle = self.full_hydrate(bundle)
File \"/Library/Python/2.7/site-packages/tastypie/resources.py\", line 896, in full_hydrate
value = field_object.hydrate(bundle)
File \"/Library/Python/2.7/site-packages/tastypie/fields.py\", line 746, in hydrate
return self.build_related_resource(value, request=bundle.request)
File \"/Library/Python/2.7/site-packages/tastypie/fields.py\", line 659, in build_related_resource
return self.resource_from_uri(self.fk_resource, value, **kwargs)
File \"/Library/Python/2.7/site-packages/tastypie/fields.py\", line 578, in resource_from_uri
obj = fk_resource.get_via_uri(uri, request=request)
File \"/Library/Python/2.7/site-packages/tastypie/resources.py\", line 810, in get_via_uri
raise NotFound(\"An incorrect URL was provided '%s' for the '%s' resource.\" % (uri, self.__class__.__name__))
NotFound: An incorrect URL was provided '/api/v1/riders/1/' for the 'RideForRiderProfileResource' resource.
"
}
我的 POST 数据中的两个资源 URI 都指向有效资源,因此我不确定是什么导致此失败。我正在 Chrome 中使用 Postman 扩展进行测试,如果这很重要的话。我可以发布新的游乐设施,但不能发布 RideMembership 条目。
谢谢大家。
更新
如ozgur指出(请参阅已接受的答案),我在 RideMembershipResource
中引用了错误的资源。我的 Ride
和 RiderProfile
模型有多个 ModelResources
,因此我可以在多对多关系的两侧包含每个模型的有限版本。我更新了我的 RideMembershipResource
以指向正确的 ForgeignKey
资源,如下所示:
class RideMembershipResource(ModelResource):
class Meta:
queryset = RideMembership.objects.all()
resource_name = 'rider_memberships'
authorization = Authorization()
always_return_data = True
rider = fields.ForeignKey('riderapp.api.RiderProfileForRideResource', 'rider')
ride = fields.ForeignKey('riderapp.api.RideForRiderProfileResource', 'ride')
并将我的帖子数据更改为:
{
"rider": "/api/v1/riders_for_ride/1/",
"ride": "/api/v1/rides_for_riders/12/",
"invite_reason": "because it's my ride!"
}
现在我可以发布关系了。干杯!
最佳答案
资源 RideMembershipResource
正在连接两个单独的 Ride
实例。
我认为您应该将 RideMembershipResource
资源中的 rider
字段更改为以下内容;
rider = fields.ForeignKey(RiderProfileForRideResource, 'rider')
我对tastypie了解不多,但您可能需要将 POST 数据中的资源网址
更改为:
{
"rider": "/api/v1/riders_for_ride/1/",
"ride": "/api/v1/rides/12/",
"invite_reason": "because it's my ride!"
}
关于python - TastyPie:如何 POST 到中间 ManyToMany 'through' 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28568016/
有人告诉我,如果我只有一个“东西”,比如家(不是多个家),我应该在 routes.rb 中使用资源 :home,而不是资源 :home。但是当我查看路由时,POST 函数似乎想要 home#creat
Activity 开始。这些代码框架顺利通过。 // Initialize array adapters. One for already paired devices and //
资源 search-hadoop.com search-hadoop.com索引所有邮件列表,非常适合历史搜索。当你遇到问题时首先在这里搜索,因为很可能有人已经遇到了你的问题。 邮件列表 在A
我是 WPF 的新手,正在努力使用位于单独程序集中的样式。这就是我正在做的:- 我有一个带有\Themes 文件夹的类库项目,其中包含一个“generic.xaml”,它合并了\Themes 内的子文
我正在编写一个使用虚拟树状文件结构的插件。基本上它就像一个包含文件的标准文件系统,区别在于这些文件实际上并不存在于文件系统中的特定位置,而只是 java 对象。 这些当前由使用 SettingProv
如果我在 XAML 中使用以下内容,我会收到错误消息: 错
我正在使用 laravel 资源来获取 api 的数据: return [ 'id' => $this->id, 'unread' =>
我有以下 pom.xml: 4.0.0 mycompany resource-fail 0.0.1-SNAPSHOT BazBat
许多GDI +类都实现IDisposable,但是我不确定何时应该调用Dispose。对于使用new或静态方法(例如Graphics.CreateGraphics)创建的实例来说,这很明显。但是,由属
我正在构建一组 RESTful 资源,其工作方式如下:(我将使用“people”作为示例): 获取/people/{key} - 返回一个人对象 (JSON) GET/people?first_nam
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一个使用 $resource 的简单 Controller : var Regions = $resource('mocks/regions.json'); $scope.regions =
在 Azure 门户中,如何查看不同资源之间的依赖关系。我特别想查看哪些资源正在使用我要删除的存储。 最佳答案 您可以使用应用程序洞察应用程序 map 来执行此操作: 您还可以打开存储帐户的日志记录:
我正在使用 ionic 生成资源(图标和启动画面)。我正在使用 ionic v2.1.0 和 cordova v6.4.0。 到目前为止我一直在使用(它在以前的版本中工作): cordova plat
是否可以使用 Assets 包含子文件夹中的文件? 示例:[base_url]/assets/css/pepper-grinder/jquery-ui-1.8.11.custom.min.css 最佳
我正在阅读一些尝试教授 Android 开发的书。在书中,作者概述了 res/下的一些目录。他提到 res/menu 包含基于 XML 的菜单规范。他还提到了保存“通用文件”的 res/raw。当我创
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 9 年前。 Improv
我在服务器上使用 express-resource。在我的 AngularJS Controller 中: var User = $resource('/services/users/:use
因此,每当我运行我的应用程序时,它都会立即崩溃并给出以下错误: No package identifier when getting value for resource number 0x00000
对于我正在创建的(网络)应用程序,我需要使用基本身份验证在我的 UIWebView 中加载页面。 现在设置我使用的授权 header : NSString *result = [NSString st
我是一名优秀的程序员,十分优秀!