Django:使用contenttypes框架的一般关系示例? - python

我已经多次浏览了有关contenttypes框架的Django文档,但我对它的理解不足以在项目中实现泛型关系。我一直在寻找有关此事的在线示例或教程,但找不到一个。称我为哑巴,但在这方面我需要一些帮助(请不要仅通过链接到文档来回答问题)。基于在线资源的缺乏,我相信如果您用一个完整的例子来回答这个问题,您的答案可能是迄今为止有关django通用关系(奖金!)的最有用的例子。

因此,我的问题是:有人可以显示模型的简单示例,也可以显示几行代码来显示如何与通用模型实例进行交互吗?

作为启发,我认为这是一种非常常见的情况:

一个站点的媒体项目在很大程度上被相同,但略有不同。例如,假设有图像和视频项目,并且用户可以“喜欢”项目或对项目进行“评论”。赞和评论,无论发布在图像或视频项目上,都应视为相同。因此,如果有一个ItemView用于查看用户相册中的图像或视频,则可以进行以下几种调用:mediaitem.comments.all()len(mediaitem.likes.all())comment.user_who_commented,而不必知道它是哪种媒体项目(图像或视频) 。

我相信您需要为此六个模型:

  • 抽象MediaItem
  • 两种不同类型的媒体项:ImageItemVideoItem
  • 抽象MediaItemActions
  • 可以对媒体项目执行的两种不同类型的操作:LikeComment
  • 如果您知道如何使用此Django功能,请向我们展示完整的示例!我觉得这将是一个非常强大的工具,并且渴望在我的应用程序中使用它。越明确,越好。

    参考方案

    您的用例听起来非常类似于Django comments framework(现已弃用)。如果您查看models,那么您将看到如何在BaseCommentAbstractModel中使用通用关系-请注意,您需要所有三个字段,ForeignKeyContentType的字段,用于保存对象的pk的字段以及GenericForeignKey字段。

    至于如何通过GenericForeignKey查询对象,您可以在该项目的template tags中看到一些示例。例如,参见get_query_set中的BaseCommentNode方法,该方法通过查询目标对象的内容类型和pk来检索注释。

    def get_query_set(self, context):
        ctype, object_pk = self.get_target_ctype_pk(context)
        if not object_pk:
            return self.comment_model.objects.none()
    
        qs = self.comment_model.objects.filter(
            content_type = ctype,
            object_pk    = smart_text(object_pk),
            site__pk     = settings.SITE_ID,
        )
    

    Django Python日期时间设置为午夜 - python

    我有django对象的日期时间,但可以是一天中的任何时间。它可以是一天中的任何时间,但我需要将时间设置为00:00:00(另一个日期设置为23:59:59,但原理是相同的)end_date = lastItem.pub_date 当前的结束日期是2002-01-11 12:34:56我需要怎么做才能将其更改为00:00:00?我试过了:end_date.ho…

    Django:DateField“此字段不能为空。” - python

    我发布这样的休息请求:{title:some title, recurring:true, day:Wednesday, time:12:30, description:some text} 我没有传递日期,因为该事件重复发生,并且该值应该为空。服务器响应为:{"date": ["This field cannot be bla…

    处理后如何删除照片? - python

    我的Django模型中有两个字段: class Staff(models.Model): photo = models.FileField(blank=True, null = True) encodings = JSONField() 我从表单获取照片,然后使用该照片获取编码。处理后如何删除照片?我试过了self.photo = None or self.…

    Django:错误:您无权访问该端口 - python

    我是整个安装的新手,请保持友善。在dev上,该命令通常可以正常工作,但是自从我尝试使用Django的不同命令以来,某些东西就出错了。python manage.py runserver 0.0.0.0:80 我没有使用此端口的权限了。我可以使用端口8080,但将端口添加到url中通常的主机名末尾时,网站无法正常工作。当我使用端口80时,无论如何我都无需在UR…

    Django-一个CBV可处理多种情况 - python

    我很难理解如何使用单个CBV处理(至少)2种不同情况。这是我想做的事情:我有一个ListView来显示对象列表。从那里,我生成一个链接以导航到DetailView以显示对象的详细信息。从那里,我生成一个链接到呈现相关报告的不同视图。我想使用以下网址:1. /myapp/list.html/ 2. /myapp/detail.html/<<uuid…