昨天发了一个问题,但我不太清楚我在尝试什么。我正在努力寻找有关如何最好地实现这一目标的任何有用的教程,以便在正确的方向上轻推非常感激。
我已经建立了一个引用django_content_type的模型。我的想法是使用这个模型来引用其他模型,这样它们就可以被标记为“特色”内容,而不必在每个模型上放置一个新的“isFeatured”字段。
我希望能够做到的是每个模型的管理员表单上都会出现一个复选框,表示内容是否有特色。
class FeaturedContent(models.Model):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
首先,这是正确的方法吗?
我是否需要创建自定义表单/模型字段?以及如何将此字段引入管理模板?
我一直在查看(django.contrib.contenttypes)generic.py,你可以清楚地看到模板数据的加载位置以及正在使用的模板。我想知道是否需要扩展这个类而不是编写自己的字段?
感谢您的帮助,
詹姆斯
答案 0 :(得分:0)
在我看来,这不是正确的方法。最好将abstract base classes与BooleanField
一起使用,如下所示:
class FeaturedModel(models.Model):
is_featured = models.BooleanField(default = False)
class Meta:
abstract = True
class Foobar(FeaturedModel):
title = models.CharField(max_length = 200)
...
通过这种方式,您可以获得每个模型的所有优点,使其具有您可以使用的非常自己的is_featured
字段,而不会出现内容类型的复杂性。