从用户创建的对象获取特定于站点的用户配置文件字段

时间:2018-09-09 02:03:07

标签: python django django-templates django-sites

我正在使用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

如何过滤多对一相关模型?

1 个答案:

答案 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')