我有一个模型称为链接,它允许用户发送网址。还有一些通用视图可以处理CRUD操作。如何避免在Django中为类似模型重复多个视图?
然后我决定添加另一个名为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
@Ivan我不知道你在说什么。你有关于这个的任何文档/教程吗? – sheshkovsky
我正在谈论的只是使用抽象的视图类,你可以把常见的功能。 – Ivan