相关疑难解决方法(0)

Django的.覆盖模型的保存

在保存模型之前,我会重新调整图片大小.但是,如何检查是否添加了新图片或更新了描述,以便每次保存模型时都可以跳过重新缩放?

class Model(model.Model):
    image=models.ImageField(upload_to='folder')
    thumb=models.ImageField(upload_to='folder')
    description=models.CharField()


    def save(self, *args, **kwargs):
        if self.image:
            small=rescale_image(self.image,width=100,height=100)
            self.image_small=SimpleUploadedFile(name,small_pic)
        super(Model, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

我想仅在新图像加载或图像更新时重新缩放,但在更新描述时不重新缩放.

python django

115
推荐指数
3
解决办法
17万
查看次数

如何在内存中缓存Django模型

我在我的应用程序中有一个模型,在我的应用程序中使用了很多,一些视图在该表中做了100个查询,我已经有很多优化来更好地利用这个模型,但是很大一部分由于个人原因,数量是由其他类的Django init方法引起的...所以实际上我只是放了一个全局变量来存储该模型的所有对象,所以当我从该模型中创建或删除一个对象时只是重新加载该列表...但我不想使用像Memcached或Redis这样的缓存机器...我只想将QuerySet结果存储在内存中......我还想在这个缓存的Queryset中使用Managers.

提前谢谢,抱歉我的英语不好.

python django caching django-models

8
推荐指数
1
解决办法
3万
查看次数

Django - 按Max(日期)年筛选查询集

我想知道我是否可以进入单个查询,某个模型的所有对象,其日期年份等于模型的最大值("日期")年份.例如,使用Aggregation Django Docs中的模型,我怎样才能获得Book最近发布的年份中发布的所有内容Book

文档中的所有示例都通过立即值(pubdate__year=2006)进行过滤,但我需要在同一查询中对同一对象使用计算值.

当然,我可以通过执行两个查询来执行此操作:一个用于获取最大年份,另一个用于按年度过滤,但我认为应该可以在单个查询中执行此操作.这只是我还没弄明白.

谢谢你的帮助!

编辑:

由于你们中的一些人给出了类似的答案,我正在写这个更新,以便更好地理解我的问题.

这是我的模特:

class Expo(models.Model):

    class Meta:
        verbose_name= _('Expo')
        verbose_name_plural = _('Expos')

    name = models.CharField(max_length=255)
    place = models.CharField(max_length=255, null=True, blank=True)
    date = models.DateField()
    bio = models.ForeignKey(Bio, related_name='expos')
Run Code Online (Sandbox Code Playgroud)

我需要" 在我的数据库中存储ExpoExpos 列表的最近一年中发生的所有s "

要解决这个问题,我这样做:

from django.db.models import Max
max_year = Expo.objects.all().aggregate(Max('date'))['date__max'].year
expos = Expo.objects.filter(date__year=max_year)
Run Code Online (Sandbox Code Playgroud)

但是,据我所知,对数据库执行两次查询.我想要一个表达式,让我得到相同的结果,但执行单个查询.

我按照建议尝试了:

Expo.objects.annotate(max_year=Max('date__year')).filter(date__year=F('max_year'))
Run Code Online (Sandbox Code Playgroud)

但得到错误:

FieldError: Join on field 'date' not permitted. Did you misspell 'year' for the lookup type? …
Run Code Online (Sandbox Code Playgroud)

sql django django-queryset

4
推荐指数
1
解决办法
2万
查看次数

将列表转换为查询集

为了提高性能,在我的项目中,大多数模型实例都作为列表值存储在缓存中。但 Django Rest Framework 中的所有通用视图都期望它们是查询集对象。如何将从列表中获得的值转换为像对象这样的查询集,以便我可以使用通用视图。

说,我有一个类似的功能

def cache_user_articles(user_id):
    key = "articles_{0}".format(user_id)

    articles = cache.get(key)

    if articles is None:
        articles = list(Article.objects.filter(user_id = user_id))
        cache.set(key, articles)

    return articles
Run Code Online (Sandbox Code Playgroud)

在我看来.py,

class ArticleViewSet(viewsets.ModelViewSet):

    ...

    def get_queryset(self, request, *args, **kwargs):
        return cache_user_articles(kwargs.get(user_id))
Run Code Online (Sandbox Code Playgroud)

但是,这当然是行不通的,因为 Django Rest Framework 期望结果是get_querysetQuerySet 对象,并且根据PUT请求它会调用它的“get”方法。有什么办法可以让它与通用 DRF 视图一起使用。

python django mongoengine django-rest-framework

2
推荐指数
1
解决办法
3993
查看次数