这是一种cms类型的应用程序
我有一个文章模型和一些专业模型.py在
class Article(models.Model):
foo = models.CharField(max_length=50)
bar = models.CharField(max_length=100,blank=True)
DISPLAY_CHOICES = (
('N', 'None'),
('C','Carousel'),
('M','Marketing'),
('F','Featurette')
)
display = models.CharField(max_length=1, choices = DISPLAY_CHOICES)
def __unicode__(self):
return self.title
class Artist(Article):
website = models.URLField(max_length=200,blank=True)
class Venue(Article):
location = models.CharField(max_length=150)
map_link = models.URLField(max_length=200,blank=True)
class Event(Article):
time = models.DateTimeField()
venue = models.ForeignKey(Venue)
performers = models.ManyToManyField(Artist)
我想根据物品展示但是当我打电话给你的时候
^{pr2}$我仍然需要子类的额外属性,所以我写了
#views.py
def castToSubClass(article):
try:
return Artist.objects.get(article_ptr_id = article.id)
except:
try:
return Event.objects.get(article_ptr_id = article.id)
except:
try:
return Venue.objects.get(article_ptr_id = article.id)
except:
return article
def index(request):
carousel = [castToSubClass(article) for article in Article.objects.filter(display='C']
marketing = [castToSubClass(article) for article in Article.objects.filter(display='M'[:3]]
featurettes = [castToSubClass(article) for article in Article.objects.filter(display='F']
return render_to_response('frontpage.html',
{
'carousel': carousel,
'marketing':marketing,
'featurettes': featurettes
})
为了在适当的子类对象中转换它们,除了看起来笨拙之外,这似乎意味着我要为查询集中的每个(或几乎每个)项访问数据库两次。在
有没有办法在最初打给经理的电话中做到这一点?在
谢谢。在
使用一个模型存储所有内容,并添加一个字段来区分文章类型,这样您就可以使用模板中的display为每种类型呈现不同的外观(如tumblr do)。在
相关问题 更多 >
编程相关推荐