我有一个名为Link的模型,允许用户发送url,还有一些通用视图来处理CRUD操作。你知道吗
然后我决定添加另一个名为Image的模型,它允许用户发送图像。由于链接和图像之间有多个共享字段,我创建了一个新的抽象模型来保留其中的公共字段。你知道吗
现在我应该为图像模型添加视图。天真的选项似乎是复制链接的所有通用视图,并用图像替换模型字段。但我想可能有一种更有效的方法(比如抽象模型,以避免重复共享字段)。我不确定,但也许使用ContentType
模块会有所帮助?你知道吗
所以我的问题是:我使用ContentType内置应用程序来处理两个模型的CRUD操作是否正确?如果是的话,我该如何写这些观点?例如,在我显式定义泛型视图要使用的模型时,如果我希望同一个视图为两个不同的模型执行相同的任务,我该如何做?或者在这种情况下使用泛型视图不是一种方法?你知道吗
我添加了部分代码,因此如果有人通过一些简短的代码提示回答这些问题,可以使用它们:
你知道吗型号.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()
...
你知道吗视图.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()
...
我觉得你说得再简洁不过了。使用
ContentType
组合CBV可能只会增加更多开销,ORM需要使用另一个JOIN
进行DB查找。你知道吗但你的视野可能会短一点。您只需要定义queryset或mode,但不能同时定义两者。你知道吗
相关问题 更多 >
编程相关推荐