【问题标题】:Django User Model MethodsDjango 用户模型方法
【发布时间】:2014-04-02 19:31:40
【问题描述】:

所以我在我的系统中实现了 Auth 和 Profile,但是我想扩展 User 模型,但我不知道什么被认为是“正确”的这样做方式。

我只想创建一个为用户返回链接的方法,例如:

<a href="URL" class="GroupName">Username</a>

我认为这可能最好使用一种方法来完成,因为链接会改变,我不想通过我所有的模板文件来解决这个问题。

这对于使用 Django 的人来说可能很常见,但我没有经常使用它,所以我不熟悉约定,所以任何建议都会很棒

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    如果您不更改数据库中存储的内容,最简单的方法是代理模型。这是文档中的一个示例 (https://docs.djangoproject.com/en/dev/topics/db/models/#proxy-models)

    from django.db import models
    
    class Person(models.Model):
        first_name = models.CharField(max_length=30)
        last_name = models.CharField(max_length=30)
    
    class MyPerson(Person):
        class Meta:
            proxy = True
    
        def do_something(self):
            # ...
            pass
    

    如果您想做一些比向 User 模型添加方法更复杂的事情,例如添加新的数据字段,我建议您创建一个与 User 一对一关系的模型。

    【讨论】:

    • 是的,我查看了代理模型,但我不确定如何实现它
    • 您只需创建一个扩展 User 的新模型,其 Meta 类定义如上。然后你可以为模型提供方法。
    • 我的意思是我的文件在哪里,它叫什么等?我已经在 webroot 中创建了一个名为 userproxy.py 的文件,因为我不知道它应该在哪里
    • 在 Django 中,所有模型都在您的应用程序的 models.py 中。阅读文档,“投票教程”是一个很好的起点:docs.djangoproject.com/en/dev/intro/tutorial01
    • 所以你说我需要在目录中创建一个模型文件并将其安装在应用程序中?我正在尝试这个,它说“没有名为 users.UserManager 的模块”,并且在 users/models.py 中有一个名为 UserManager 的类
    【解决方案2】:

    在 Django 中创建 URL 而无需担心更改它们的常规方法是使用 {% url %} 标记。见the documentation on reversing URLs

    【讨论】:

      【解决方案3】:

      我知道您专门要求扩展用户模型,但您是否考虑过创建template tag 来生成链接? 如果您只需要模板中的方法,那绝对是可行的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-04-26
        • 2011-08-20
        • 1970-01-01
        • 1970-01-01
        • 2018-09-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多