django – 对ContentType感到困惑
发布时间:2020-12-20 13:40:53 所属栏目:Python 来源:网络整理
导读:假设这是用户照片的模型: 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
假设这是用户照片的模型:
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) 现在,这是用户所有Feed的模型: class StreamItem(models.Model): user = models.ForeignKey(User) content_type = models.ForeignKey(ContentType) object_id = models.PositiveIntegerField() content_object = GenericForeignKey('content_type','object_id') >在上面的类StreamItem中,content_type是实例的data_type吗? 谢谢. 解决方法
这是一个非常快速的答案:
1)content_type将是对象类型(在您的情况下为照片或状态),有关其工作原理的更多信息,请参阅Django contenttypes framework. 2)object_id将是Photo或Status的主键 3)要访问泛型的属性,请通过content_object属性访问它们 stream_item.content_object.pub_date 4)我会根据你想要的方式在每个模型上创建一个方法.这可以与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 %} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |