假设这是用户照片的模型:
class Photo(models.Model):
user = models.ForeignKey(User)
title = models.CharField()
image = models.ImageField()
pub_date = models.DateTimeFied(auto_now=True, auto_now_add=pub_date)
update = models.DateTimeFied(auto_now=False, auto_now_add=True)这是另一个用户状态模型:
class Status(models.Model):
user = models.ForeignKey(User)
tweet = models.TextFied()
pub_date = models.DateTimeFied(auto_now=True, auto_now_add=pub_date)现在,这是一个用户的所有提要的模型:
class StreamItem(models.Model):
user = models.ForeignKey(User)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type','object_id')content_type会是实例的data_type吗?object_id是什么?是content_type实例的pk还是该StreamItem实例的pk?content_type实例的content_type(照片和状态)并将其初始化为StreamItem实例?谢谢。
发布于 2014-03-09 03:58:03
这是一个非常快速的答案:
1) content_type将是对象类型(在您的示例中是照片或状态),有关如何工作的更多信息,请参见Django内容类型框架。
2) object_id将是照片或状态的主键
3)要访问泛型的属性,可以通过content_object属性访问它们
stream_item.content_object.pub_date4)我将为每个模型的呈现方式创建一个方法。这可以与python的模板系统结合使用。将这些方法命名为相同的方式,您可以像调用接口一样调用它。
class Status(models.Model):
...
def render_widget(self):
return render_to_string('status_widget.html', {'status' : self })
class Photo(models.Model):
...
def render_widget(self):
return '<span>My HTML Here</span>'在模板中使用:
{% for item in stream_items %}
{{ item.content_object.render_widget }}
{% endfor %}https://stackoverflow.com/questions/22195098
复制相似问题