django - 慢 Django 多对多查询
问题描述
我有 900 万条记录。很快就会有200M。获取此信息可能需要 15 分钟以上:
class Follower():
hashtags = models.ManyToManyField(
"instagram_data.Hashtag", verbose_name=_("hashtags_name"))
class Hashtag(models.Model):
name = models.CharField(_("HashtagName"), max_length=150, null=True, blank=True, unique=True)
def __str__(self):
return self.name
我认为它反向查找所有值。我认为它可能会找到 2000 条记录。我究竟做错了什么 ?
解决方案
您发布的图像看起来像模型管理员,如果是这种情况,请尝试将该字段添加hashtags
到模型管理员的raw_id_fields
[Django docs]中(尽管您不会获得选择标签,并且必须手动输入 id/pk ) 或autocomplete_fields
[Django docs]用于select2
异步加载选项。这将类似于:
class HashtagAdmin(admin.ModelAdmin):
ordering = ['name']
search_fields = ['name']
class FollowerAdmin(admin.ModelAdmin):
autocomplete_fields = ['hashtags']
admin.site.register(Follower, FollowerAdmin)
admin.site.register(Hashtag, HashtagAdmin)
如果这不在模型管理员中,您可以更改您在表单类上的表单中使用的小部件(您需要构建一个自定义小部件或寻找一些提供允许逗号分隔值的小部件的包),或者您可以使用包Django-Select2为用户提供可搜索的选择标签(再次使用 select2)。
推荐阅读
- azure-devops - 是否可以进行跨组织的 Pull Request 提及?
- cassandra - What are the advantages of using "new style" Cassandra paging state over "old style" token functions?
- tableau-api - Tableau add trend line to discrete data?
- reactjs - React/Redux 应用程序中的导入问题
- javascript - 如何使用最新的 Mapbox-gl-js 版本避免透明度重叠?
- python - 在python中替换字典的值
- php - Looking for Laravel php developer to resolve updating function with image uploading its not working
- python - Tensorflow 确认权重已冻结
- ios - 打开 iOS 设置应用程序(顶级 - 不是应用程序设置页面的深层链接) - iOS 12/13
- ios - 如何在 Swift 中将键值对分解为 JSON 字符串?