【发布时间】:2016-02-08 16:20:33
【问题描述】:
我有一个名为 Link 的模型,它允许用户发送 url。并且有一些通用视图来处理 CRUD 操作。
然后我决定添加另一个名为 Image 的模型,它允许用户发送图像。由于 Link 和 Image 之间有多个共享字段,我创建了新的抽象模型来保留公共字段。
现在我应该为 Image 模型添加视图。天真的选项似乎是复制 Link 的所有通用视图并用 Image 替换模型字段。但我想可能有一种更有效的方法来做到这一点(比如避免重复共享字段的抽象模型)。我不确定,但也许使用ContentType 模块会有所帮助?
所以这是我的问题:我是否正确使用 ContentType 内置应用程序来处理两种模型的 CRUD 操作以提高效率?如果是这样,我将如何编写视图?例如,当我明确定义通用视图要使用的模型时,当我希望同一个视图为两个不同的模型执行相同的任务时,我该怎么做?或者也许在这种情况下使用通用视图不是要走的路?
我添加了我的代码的一部分,所以如果有人会通过一些简短的代码提示来回答这个问题,可以使用它们:
models.py
class Base(models.Model):
title = models.CharField(max_length=200)
slug = models.CharField(max_length=200, db_index=True)
category = models.ForeignKey(Category, default=1)
. . .
class Meta:
abstract = True
class Link(Base):
url = models.URLField("URL")
description = models.TextField(max_length=500)
...
class Image(Base):
image = models.ImageField()
...
views.py
class LinkListView(ListView):
model = Link
queryset = Link.objects.all().order_by('-rank_score')
paginate_by = 10
class LinkDetailView(FormMixin, DetailView):
models = Link
queryset = Link.objects.all()
...
【问题讨论】:
-
混入/抽象类还不足以处理常见的东西吗?
-
@Ivan 我不知道你在说什么。你有这方面的文档/教程吗?
-
我说的是使用抽象视图集类,您可以在其中放置常用功能。
标签: python django django-generic-views django-contenttypes