【问题标题】:In django, is it a bad practice to retrieve database records with slug fields loaded by fixtures?在 django 中,使用夹具加载的 slug 字段检索数据库记录是一种不好的做法吗?
【发布时间】:2019-12-30 23:08:45
【问题描述】:

我正在开发一个代码库,其中原始开发人员创建了一个ProductType model,数据库中有几行代表几种产品类型。在整个代码中,有类似ProductType.objects.get(slug='foo_product_type') 的语句。如果夹具没有用slug = 'foo_product_type' 加载ProductType 记录,这些语句将导致严重崩溃。用 slug 'foo_product_type' 定义 ProductType 的最佳实践是什么?似乎python代码不应该依赖于加载的固定装置,但我真的想不出另一种解决方案。感觉服务器逻辑依赖于某些数据库字段是一种不好的做法,但我不确定我是否能想到另一种方法。

我曾在模型定义上使用choices=,但这似乎更有助于数据完整性,而不是加载带有price 之类的详细信息的记录,所以这对我没有帮助。我目前在迁移新数据库后加载固定装置,这很有效,但我很好奇是否有人有更好的解决方案。

if ProductType.objects.get(slug='foo_product_type'):

ProductType 与 slug 'foo_product_type' 不存在时。

当夹具被加载时,对象被抓取以在代码中使用。当记录丢失时,应用程序崩溃。

【问题讨论】:

  • 上述方法不起作用,因为.get(..) 会在记录不存在的情况下引发错误。
  • @WillemVanOnsem 是的,这是正确的。我正在寻找另一种方法。 django-enum 合适吗?

标签: django enums slug django-fixtures


【解决方案1】:

你应该使用try-except

try:
   product_type = ProductType.objects.get(slug='foo_product_type')
   ...
except ProductType.DoesNotExist:
   # handle exception here

【讨论】:

猜你喜欢
  • 2023-02-24
  • 2017-05-26
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
  • 1970-01-01
  • 2012-04-11
  • 2018-10-03
  • 1970-01-01
相关资源
最近更新 更多