首先,我想说我真的是Django的新手,正在为我的项目寻找一些架构建议。
当用户单击“保存”按钮时,需要将输入字段中的信息保存到数据库中。当我单击“保存”按钮时,我不希望刷新页面,因为只会发送属于该部分的信息。 (但是,如果这需要一些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部分,但是仍然有可能根本没有插入信息。
我应该怎么做?
答案 0 :(得分:1)
因此,如果您想在不刷新页面的同时将数据保存到数据库,则只需实现一点都不难的AJAX(我做了很多)。就您的体系结构而言,如果模型中的所有内容都与BHA直接相关,那么最好将其包含在其中,除非您需要单独使用/访问其中的某些信息,否则这些信息将被复制跨多个实例。例如,假设我有一个包含发票和客户的发票系统。我可以直接将客户信息作为发票模型的一部分,但是我可以有多个具有相同客户的发票....因此,最好是让多个具有相同客户信息的发票引用相同的客户信息。这是通过外键处理的。还考虑一下查询,以及如何为您需要获取此“信息”集的两个模型。现在,当您不需要进行联接时,您可能会在该联接上进行查询。这就是为什么我建议您将它们放在同一模型中,直到您意识到有必要将它们分开之前。
最后但并非最不重要的一点,如果您是Django的新手,我建议您不要使用CBV(基于类的视图)。理解您正在做什么的事情太多了(很多教程花了很多时间在CBV上,而我个人不是粉丝)。使用FBV(基于函数的视图),因为即使它有点混乱或更多行代码,您也将确切知道您在做什么。为了说明这一点,大约10个月前,我开始开发一个发票系统Django项目。我开始使用CBV,然后立即切换到FBV。现在,我在Heroku上运行了一个多租户生产应用程序,它几乎是一个完整的发票系统。
由于您是新手,所以我相信这将帮助您探索如何开发应用程序。归结为尝试一些东西,然后逐渐将其更改为您想要的东西。像我一开始那样修改模型和数据库可能会很好,因为这样您就可以学习如何进行大量的数据迁移以及模式更改。希望这会有所帮助!