如何在DetailView中使用扩展用户模型?

时间:2018-01-17 18:52:44

标签: python django django-models django-views

我有一个负责显示用户个人资料的Django视图。我正在使用django本身提供的用户模型,但我也希望用我自己的一些信息扩展它,所以我创建了自己的模型来扩展用户模型本身:

User = get_user_model()
# Create your views here.

class profileDetailView(DetailView):
    template_name = 'profile.html'

    def get_object(self):
        username = self.kwargs.get("username")
        if username is None:
            raise Http404
        return get_object_or_404(User, username__iexact=username, is_active=True)

以下是我的观点,我想用它:

try {
    final Document document = Jsoup.connect("http://www.jozita.lt/").get();
    Elements ele = document.select("div#fuel_price_table_silale_1");
    final String title = ele.select("td.price").text();          
    System.out.println(title);
} catch (IOException ex) {
    Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}

现在我的问题是,DetailViews are meant for a single model,我怎样才能实现这一目标?

1 个答案:

答案 0 :(得分:0)

您在扩展内置用户模型的两种方式之间感到困惑。

如果您继承自AbstractBaseUser,这意味着您要定义自己的用户模型 - 您需要定义自己的用户名/电子邮件字段等,并设置AUTH_USER_MODEL指向您的替换型号。在这种情况下,您不需要在模板中引用两个模型,因为您的模型将 用户。

但是,如果要定义相关的UserProfile,则不需要继承AbstractBaseUser,也不需要更改AUTH_USER_MODEL;但是你需要定义与实际用户模型的关系,可能是通过一对一的字段。在这种情况下,要访问配置文件,您只需遵循模板中的关系 - 例如通过{{ user.userprofile.currentprofile }}等。

在你的情况下,我建议采取第二种选择;从AbstractBaseUser中删除继承,并向User添加一对一字段。