當在後端將Backbone.js有線前端上的相關對象的信息顯示出來時,這些屬性存儲在PostgreSQL數據庫的單獨Django模型中是什麼?顯示來自Backbone.js相關對象的信息
我目前正在使用Django,Tastypie,Django-Tastypie,Backbone.js,Backbone-Relational和Handlebars.js模板。我願意以不同的方式做事,我願意學習像Riak這樣的新技術,如果它是必要的或更高效的。
在前端,我試圖做的事情對標準Django模板來說非常簡單:在帖子和該帖子的作者上顯示標籤列表。
在後端我有一個Post
模型和Tag
,User
和UserProfile
(作者)模型。 Users
和UserProfiles
是1比1,Post
與UserProfile
有關係,但我想要顯示的內容存儲在User
模型下的屬性username
下。目前,這需要兩次艱苦的查找,以便爲每篇文章獲取作者的用戶名。 Post
型號:
class Post(models.Model):
author = models.ForeignKey(UserProfile)
topic = models.ForeignKey(Topic)
tags = models.ManyToManyField(Tag)
content = models.TextField()
title = models.CharField(max_length=250)
slug = models.SlugField()
description = models.TextField()
在Coffeescript中我有我的Backbone模型。目前,我正在嘗試在Post模型初始化時獲取相關作者和標記對象。我目前的代碼是非常草率的,我很抱歉,我的JavaScript foo仍在開發中!
class User extends Backbone.RelationalModel
class UserProfile extends Backbone.RelationalModel
urlRoot : '/api/v1/profile/?format=json'
class PostTag extends Backbone.RelationalModel
initialize: ->
this.get('tag').on 'change', (model) =>
this.get('post').trigger('change:tag', model)
class Tag extends Backbone.RelationalModel
urlRoot: '/api/v1/tag/?format=json'
idAttribute: 'id',
relations: [{
type: Backbone.HasMany,
key: 'post_tags',
relatedModel: PostTag,
reverseRelation: {
key: 'tag',
includeInJSON: 'id',
},
}],
class Post extends Backbone.RelationalModel
idAttribute: 'id',
relations: [{
type: Backbone.HasMany,
key: 'post_tags',
relatedModel: PostTag,
reverseRelation: {
key: 'post',
includeInJSON: 'id',
},
}]
initialize: ->
@.get('tags').forEach(@addTag, @)
@.addAuthor()
@.on 'change:tag', (model) ->
console.log('related tag=%o updated', model)
addAuthor:() ->
profile_id = @.get('author')
if app.UserProfiles.get(profile_id)?
profile = app.UserProfiles.get(profile_id)
user = app.Users.get(profile.user)
@.set('author_name',user.get('username'))
else
profile = new app.UserProfile(profile_id)
app.UserProfiles.add(profile)
profile.fetch(success: (model,response) =>
user_id = profile.get('user')
if app.Users.get(user_id)?
user = app.Users.get(user_id)
user.fetch(success: (model,response) =>
console.log(user.get('username'))
@.set('author_name',user.get('username'))
)
console.log("Existing user"+user_id)
console.log(user.get('username'))
#@.set('author_name',user.get('username'))
else
user = new app.User('resource_uri':user_id)
app.Users.add(user)
console.log("New user"+user_id)
user.fetch(success: (model,response) =>
console.log(user.get('username'))
@.set('author_name',user.get('username'))
)
)
addTag: (tag_id) ->
console.log(tag_id)
if app.Tags.get(tag_id)?
tag = app.Tags.get(tag_id)
console.log("TAG" + tag)
else
console.log("NON EXISTENT")
console.log(tag_id)
tag = new app.Tag({'id':tag_id})
tag.fetch()
app.Tags.add(tag)
post_tag = new app.postTag({
'tag': tag_id,
'post': @.get('resource_uri')
})
@.get('post_tags').add(post_tag)
此代碼實際工作正常獲取和存儲相關的對象,但它是令人難以置信的混亂和我敢肯定,必須有一個更好的辦法。此外,我無法找到一種方法來訪問存儲的標籤名稱以顯示在我的Handlebars.js
模板中。