2010-01-22 60 views
1

昨天发了一个问题,但我并不太清楚我在尝试什么。我正在努力寻找关于如何最好地实现这一点的任何有用的教程,以便向正确的方向微调将不胜感激。django精选内容字段

我建立了一个引用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

在我看来,这是不正确的方法。你最好不要使用abstract base classesBooleanField,像这样:

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场,你可以玩,每个模型的所有善良,没有内容的并发症类型。

+0

多米尼克,谢谢你:) – Crungmungus 2010-01-25 06:25:57

+1

我对此有点迟,但这种方式不允许你像ContentType方法那样容易地跨不同模型获取精选内容。您将不得不分别查询每个不同模型的特色内容,而不是仅仅在OP的方法中查询FeaturedContent模型 – 2011-05-27 13:29:13