【问题标题】:Django apps , functionalities and modelsDjango 应用程序、功能和模型
【发布时间】:2019-01-12 16:54:29
【问题描述】:

这是一个非常初学者的问题,因为我最近学习了 Django, 我有这些问题,因为我找不到任何明确的答案。

  1. 假设我们要构建一个投票系统,并且我们有投票的用户,我对管理员用户感到困惑,我应该创建一个名为 users 的应用程序吗?或者我应该使用 django 的用户默认表?
  2. 对于每个应用程序,我都会有一个模型,并且在数据库方面肯定是这样,例如,一个用户将对许多项目有很多投票,因此我如何才能以正确的方式跨模型连接这些关系?

提前致谢

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    您不必为每个模型创建一个应用程序。应用程序通常是一个独立的、有用的实体,如果您认为将来会在另一个项目中重用它,您可以将其与其他应用程序分开。在您的情况下,您可能只有一个具有各种模型(投票、项目)的应用程序。

    1. 如果您不打算扩展它,请使用标准 Django 用户模型,但是如果您的项目变得更大并且出现更多功能,您可能希望至少创建自己的用户模型子类 AbstractUser 因为以后很难更改它上。即使你只是定义
    class User(AbstractUser):
        pass
    

    您将准备好为您的用户模型添加字段的那一天。

    1. 不,您没有每个应用程序的模型,每个应用程序可以有多个模型。要创建关系,您可以使用ForeignKeyManyToManyField。如果模型彼此紧密相关,则它们属于同一个应用程序。为了概览,您可以将内容拆分到单独的应用程序中,但请注意循环引用:您不能在 Vote 模型中导入 Project,在 Project 模型中导入 Vote。

    【讨论】:

      【解决方案2】:

      继承 AbstractUser。

      建立各种应用模型之间的关系

      from other_app.models import Model1
          Class Model2(models.Model):
              name = models.CharField(max_length=120)
              relation = models.ForeignKey(Model1, on_delete=models.DO_NOTHING)
      

      您可以在需要的地方导入任何应用的模型。

      【讨论】:

        猜你喜欢
        • 2018-02-01
        • 2017-03-14
        • 2016-11-19
        • 2017-04-30
        • 1970-01-01
        • 1970-01-01
        • 2011-02-25
        • 2013-02-24
        • 2011-01-04
        相关资源
        最近更新 更多