django - 在哪里以及如何将我的业务逻辑放入 django
问题描述
一位朋友建议我读两勺 Django 这本书,我对他为一个健壮且设计良好的 Django 项目提出的建议感到惊讶。这个阅读让我产生了疑问,这是我放置业务逻辑的地方,我举了一个例子。假设我有两个模型:
模型.py
class Sparks(models.Model):
flavor = models.CharField(max_length=100)
quantity = models.IntegerField(default=0)
class Frozen(models.Model):
flavor = models.CharField(max_length=100)
has_cone = models.BooleanField()
quantity_sparks = models.IntegerField(default=0)
假设每次我添加一个冰冻的,如果它有火花,我必须从Sparks
模型中减去它并检查是否有可用的数量。在书中,他们建议将此逻辑放在models.py
or中forms.py
。如果创建一些模型需要从另一个模型修改数据我应该在哪里做?
解决方案
您缺少数据模型,这可能是不安的根源。
class Flavor(models.Model):
name = models.CharField(max_length=100)
class Sparks(model.Model):
flavor = models.ForeignKeyField(Flavor, on_delete=models.CASCADE)
quantity = models.IntegerField(default=0)
class Frozen(model.Model):
# This maybe should be a OneToOne, can't tell from your description.
sparks = models.ForeignKeyField(Sparks)
has_cone = models.BooleanField()
然后你会做
frozen_instance = Frozen.objects.get()
frozen.sparks.quantity # This has replaced frozen_instance.quantity_sparks
推荐阅读
- sql - 如何修复 MariaDB 的 MS SQL 链接服务器缓慢问题
- php - 带有 MSSQL 的 PHP 原则:':' 附近的语法不正确
- android - 在回收站视图项目中,单个图像视图上的多个 url 加载
- python-3.x - 如何使用 python 在暗网中运行预训练的权重?
- laravel - 我正在使用 Putty 在 Godaddy VPS 上运行和编译 vue js + laravel 应用程序。更改未生效
- php - mysql 将列更新为 null 或其值
- java - 无法在 SQL Server Profiler 中查看已执行的 SQL 语句
- c# - 在没有用户的情况下访问 GraphAPI 时在邮箱文件夹上创建订阅所需的权限
- xamarin - 如何检测 Xamarin 表单中的 Internet 连接?
- alexa - 亚马逊 Alexa 技能启用设备上的卡片没有屏幕