在Django中扩展模型的正确方法

时间:2014-05-27 20:21:49

标签: python django django-models

在django 1.5中扩展第三方模型的最佳方法是什么? 假设我有第三方模型,名为Feedback:

class Feedback(models.Model):
    user = models.ForeignKey(
        'auth.User',
        verbose_name=_('User'),
        related_name='feedback_form_submissions',
        blank=True, null=True,
    )

    email = models.EmailField(
        verbose_name=_('Email'),
        blank=True,
    )
    ...

我有自己的用户类。我需要覆盖用户字段。电子邮件我需要使空白=假,并且可能想要在模型中添加另一个字段。这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:2)

根据具体情况,即您使用的是哪个第三方应用,您可以通过多种方式进行处理:

  1. 从模型继承:

    class CustomFeedback(反馈):     #etc

  2. 创建自定义应用: 通过执行django-admin.py startapp AppName_custom扩展应用程序,这是我用于某些应用程序的技术。在这种情况下,您将希望从上面的类中获取,但会拦截像saveclean这样的数据库方法。

  3. 分叉应用程序。如果您对Django缺乏经验,这很容易成为最困难的方法。只需通过gitmercurial进行克隆或分叉,然后添加修改应用行为所需的任何代码。

  4. 根据经验(请原谅表达式),您不应修改User模型,因为Auth模块已经很好地进行了比较。相反,您应该使用像django-profiles这样的应用程序向模型添加数据或扩展表单。

答案 1 :(得分:1)

你看过这篇文章吗? How to make email field unique in model User from contrib.auth in Django

我认为它能回答你想要的一切。

Django还包括如何在此处执行此操作的文档:https://docs.djangoproject.com/en/dev/topics/auth/customizing/#extending-user

您还可以为Django指定自定义用户模型,以便与AUTH_USER_MODEL =' myapp.MyUser'一起使用。从那里,您可以设置自定义字段。