Django-为我的项目寻找建筑建议

时间:2018-07-18 02:35:14

标签: python django django-models django-views

首先,我想说我真的是Django的新手,正在为我的项目寻找一些架构建议。

我有一个看起来像这样的前端模板: enter image description here

当用户单击“保存”按钮时,需要将输入字段中的信息保存到数据库中。当我单击“保存”按钮时,我不希望刷新页面,因为只会发送属于该部分的信息。 (但是,如果这需要一些AJAX插件,我现在可以放弃。目前的主要重要性只是将前端与PostgreSQL数据库连接)

例如:在“总体BHA”部分中单击“保存”只会将“总体BHA”中的输入保存到数据库中,而无需刷新页面。以及“钻头”部分的相同过程。

首先,我需要有关models.py的建议

models.py

from django.db import models

# Create your models here.
class BHA_overall(models.Model):
    drill_str_name = models.CharField(max_length=256)
    depth_in = models.IntegerField()
    depth_out = models.IntegerField()
    drilled = models.IntegerField()
    # .......

class BHA_drill_bit(models.Model):

    BIT_OPTIONS = ( ('PDC Drag'), ('Roller Cone'), ('other'))
    color = models.CharField(max_length=256, choices=BIT_OPTIONS, default='other')
    size = models.CharField(max_length=256)
    wob_max = models.CharField(max_length=256)
    # .......

我不确定这是否是实现目标的最佳方法。 “整体BHA”和“钻头”都是称为“ BHA”的数据的一部分。由于这两个都将加载在同一页面上,因此我不确定是否要完全分开这两个。也许我应该创建一个名为“ BHA”的容器类,并使“ BHA_overall”和“ BHA_drill_bit”成为它的子类?

上面的屏幕截图仅是一个称为BHA的页面,但是还有许多其他页面,其内部具有多个部分。有什么建议吗?

views.py

class BhaCreateView(CreateView):
    model = models.BHA_overall
    fields = '__all__'
    context_object_name = 'BHA_overall'
    template_name = 'base/bha.html'

这只是我编写的一个非常粗糙的代码,只在这里问一个问题。 我知道有许多种基于类的视图,例如DetailView,ListView,CreateView,UpdateView ...等。我应该使用哪一个或哪些目的?我在想我需要将CreateView和UpdateView结合起来,因为用户会将新信息更新到BHA部分,但是仍然有可能根本没有插入信息。

我应该怎么做?

1 个答案:

答案 0 :(得分:1)

因此,如果您想在不刷新页面的同时将数据保存到数据库,则只需实现一点都不难的AJAX(我做了很多)。就您的体系结构而言,如果模型中的所有内容都与BHA直接相关,那么最好将其包含在其中,除非您需要单独使用/访问其中的某些信息,否则这些信息将被复制跨多个实例。例如,假设我有一个包含发票和客户的发票系统。我可以直接将客户信息作为发票模型的一部分,但是我可以有多个具有相同客户的发票....因此,最好是让多个具有相同客户信息的发票引用相同的客户信息。这是通过外键处理的。还考虑一下查询,以及如何为您需要获取此“信息”集的两个模型。现在,当您不需要进行联接时,您可能会在该联接上进行查询。这就是为什么我建议您将它们放在同一模型中,直到您意识到有必要将它们分开之前。

最后但并非最不重要的一点,如果您是Django的新手,我建议您不要使用CBV(基于类的视图)。理解您正在做什么的事情太多了(很多教程花了很多时间在CBV上,而我个人不是粉丝)。使用FBV(基于函数的视图),因为即使它有点混乱或更多行代码,您也将确切知道您在做什么。为了说明这一点,大约10个月前,我开始开发一个发票系统Django项目。我开始使用CBV,然后立即切换到FBV。现在,我在Heroku上运行了一个多租户生产应用程序,它几乎是一个完整的发票系统。

由于您是新手,所以我相信这将帮助您探索如何开发应用程序。归结为尝试一些东西,然后逐渐将其更改为您想要的东西。像我一开始那样修改模型和数据库可能会很好,因为这样您就可以学习如何进行大量的数据迁移以及模式更改。希望这会有所帮助!