【问题标题】:Django apps , functionalities and modelsDjango 应用程序、功能和模型
【发布时间】:2019-01-12 16:54:29
【问题描述】:
这是一个非常初学者的问题,因为我最近学习了 Django,
我有这些问题,因为我找不到任何明确的答案。
- 假设我们要构建一个投票系统,并且我们有投票的用户,我对管理员用户感到困惑,我应该创建一个名为 users 的应用程序吗?或者我应该使用 django 的用户默认表?
- 对于每个应用程序,我都会有一个模型,并且在数据库方面肯定是这样,例如,一个用户将对许多项目有很多投票,因此我如何才能以正确的方式跨模型连接这些关系?
提前致谢
【问题讨论】:
标签:
python
django
django-models
【解决方案1】:
您不必为每个模型创建一个应用程序。应用程序通常是一个独立的、有用的实体,如果您认为将来会在另一个项目中重用它,您可以将其与其他应用程序分开。在您的情况下,您可能只有一个具有各种模型(投票、项目)的应用程序。
- 如果您不打算扩展它,请使用标准 Django 用户模型,但是如果您的项目变得更大并且出现更多功能,您可能希望至少创建自己的用户模型子类 AbstractUser 因为以后很难更改它上。即使你只是定义
class User(AbstractUser):
pass
您将准备好为您的用户模型添加字段的那一天。
- 不,您没有每个应用程序的模型,每个应用程序可以有多个模型。要创建关系,您可以使用
ForeignKey 和ManyToManyField。如果模型彼此紧密相关,则它们属于同一个应用程序。为了概览,您可以将内容拆分到单独的应用程序中,但请注意循环引用:您不能在 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)
您可以在需要的地方导入任何应用的模型。