我正在使用Django sites framework(Django 2.1)将一个应用程序拆分为多个站点。除User
模型外,我所有的模型都是特定于站点的。这是我的Post
模型:
post.py
class Post(models.Model):
parent = models.ForeignKey(
'self',
on_delete=models.CASCADE,
related_name='children',
related_query_name='child',
blank=True,
null=True,
)
title = models.CharField(
max_length=255,
blank=True,
)
body_raw = models.TextField()
body_html = models.TextField(blank=True)
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
)
site = models.ForeignKey(Site, on_delete=models.CASCADE)
on_site = CurrentSiteManager()
我可以按站点将帖子分开。当我想获取帖子时,我致电:
posts = Post.on_site.filter(...)
我有一个名为UserProfile
的单独模型。它是一个多对一的配置文件,其中为每个用户站点组合创建了一个唯一的配置文件(类似于SE上的配置文件实施)。个人资料具有reputation
属性,当我收到任何帖子时都想访问该属性。每个网站的reputation
属性应该有所不同(例如,在SE上,您所属的每个网站上的代表都有不同的代表)。
user_profile.py
class UserProfile(models.Model):
user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
reputation = models.PositiveIntegerField(default=1)
site = models.ForeignKey(Site, on_delete=models.CASCADE)
on_site = CurrentSiteManager()
获得{{1}后,如何访问用户的username
(在User
模型上)以及用户的reputation
(在UserProfile
模型上) }}来自查询?
我想做类似的事情:
Post
如何过滤多对一相关模型?
答案 0 :(得分:1)
更好地将 <tr v-for="object in data">
<td v-for="field in fields">{{object[field.includes(' ') ? field.replace(' ','_') : field]}}</td>
<td v-if="Actions">
<a v-for="action in Object.keys(Actions)"
@click.prevent="determineAction(action,object[Key])"
:href="getActionURI(object[Key],action)"
:class="getBtnClass(action)">
{{action}}
</a>
</td>
<edit-modal v-show="displayEditModal" @EditModalClose="hideEditMoodal()"
:data="object" :fields="editFields"></edit-modal>
</tr>
的关系设为<section class="modal-card-body">
<form>
<div class="form-group" v-for="(field,index) in fields">
<label>
{{index}}
<input :type="field" class="form-control" :placeholder="'Please enter ' + index"
:value="data[index]" @input="index = $event.target.value">
</label>
</div>
</form>
</section>
<footer class="modal-card-foot">
<button class="btn btn-success btn-block" @click="update">Update</button>
</footer>
<script>
export default{
props:{
data: {
type: Object,
required : true
},
fields: {
type: Object,
required : false
}
},
data(){
let temp = {};
for(let field in this.fields){
temp[field] = this.data[field.includes(' ') ? field.replace(' ','_') : field];
}
return temp;
},
methods:{
fireEvent(eventName,data = null){
window.Events.fire(eventName,data);
},
update(){
console.log(this.data.id);
}
}
}
</script>
,
因为Django不知道要显示多少个人资料
(但您还需要定义UserProfile -> User
)
OnetoOne
那么您就可以做到
related_name
如果您不想更改数据库结构,可以这样做
(但您需要指定要返回的配置文件)
models.OneToOneField(get_user_model(), related_name='userprofile_rev')