【发布时间】:2015-12-25 13:54:15
【问题描述】:
让我们想象一个我有一个简单的模型配方:
class Recipe(models.Model):
name = models.CharField(max_length=constants.NAME_MAX_LENGTH)
preparation_time = models.DurationField()
thumbnail = models.ImageField(default=constants.RECIPE_DEFAULT_THUMBNAIL, upload_to=constants.RECIPE_CUSTOM_THUMBNAIL_LOCATION)
ingredients = models.TextField()
description = models.TextField()
我想创建一个视图,列出所有可用的食谱,其中仅使用名称、缩略图、preparation_time 和描述的前 100 个字符。此外,我将有一个专用视图来呈现单个配方的所有剩余细节。
从效率的角度来看,由于描述可能是一个长文本,将额外信息存储在单独的模型中是否有意义,比如说“RecipeDetails”,它不会在列表视图中提取,而只能在详细视图(可能使用 prefetch_related 方法)?我正在考虑一些事情:
class Recipe(models.Model):
name = models.CharField(max_length=constants.NAME_MAX_LENGTH)
preparation_time = models.DurationField()
thumbnail = models.ImageField(default=constants.DEFAULT_THUMBNAIL, upload_to=constants.CUSTOM_THUMBNAIL_LOCATION)
description_preview = models.CharField(max_length=100)
class RecipeDetails(models.Model):
recipe = models.OneToOneField(Recipe, related_name="details", primary_key=True)
ingredients = models.TextField()
description = models.TextField()
在我最近的在线搜索中,人们似乎建议 OneToOneField 仅用于两个目的:1. 继承和 2. 扩展现有模型。在其他情况下,应将两个模型合并为一个。这可能表明我在这里遗漏了一些东西。这是对 OneToOneField 的合理使用,还是只会增加整体设计的复杂性?
【问题讨论】:
标签: django database-design django-models