次のおいしいパイのリソースがあります。
class ArtistResource(SearchableResource):
audio_tracks = fields.ToManyField('music.api.AudioTrackResource', 'audio_tracks', related_name='artists', null=True, blank=True)
class Meta:
filtering = {
"title": ('startswith',),
"id": ALL_WITH_RELATIONS,
}
queryset = Artist.objects.all()
resource_name = 'artist'
allowed_methods = ['get']
class AudioTrackResource(SearchableResource):
artists = fields.ToManyField('music.api.ArtistResource', 'artists', null=True, blank=True)
class Meta:
filtering = {
"artists": ALL_WITH_RELATIONS,
}
queryset = AudioTrack.objects.all()
resource_name = 'audio_track'
allowed_methods = ['get']
そして、次のバックボーン モデル:
class Track extends Backbone.RelationalModel
urlRoot: TRACK_API
relations: [
{
type: Backbone.HasMany
key: 'artists'
relatedModel: Artist
collectionType: ArtistCollection
reverseRelation:
key: 'track'
includeInJSON: 'title'
}
]
Track.setup()
Track
class Artist extends Backbone.RelationalModel
urlRoot: ARTIST_API
relations: [
{
type: Backbone.HasMany
key: 'audio_tracks'
relatedModel: Track
collectionType: TrackCollection
reverseRelation:
key: 'artist'
includeInJSON: 'title'
}
]
Artist.setup()
Artist
また、再帰が発生するため、Tastypie リソースにfull=Trueを設定できません... full=True を設定したくありません。しかし、いつ、どこでfetchRelated()を行うべきかわかりません。そして、オブジェクト URI の配列が既に存在するため、何もフェッチしません。両側で JSON との多対多の関係を設定する別の方法はありますか?
PS私はこの問題をグーグルで3日間調べた後にこの質問を作成しましたが、有効な解決策が見つかりませんでした。