在保存模型之前,我会重新调整图片大小.但是,如何检查是否添加了新图片或更新了描述,以便每次保存模型时都可以跳过重新缩放?
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)
我想仅在新图像加载或图像更新时重新缩放,但在更新描述时不重新缩放.
我在我的应用程序中有一个模型,在我的应用程序中使用了很多,一些视图在该表中做了100个查询,我已经有很多优化来更好地利用这个模型,但是很大一部分由于个人原因,数量是由其他类的Django init方法引起的...所以实际上我只是放了一个全局变量来存储该模型的所有对象,所以当我从该模型中创建或删除一个对象时只是重新加载该列表...但我不想使用像Memcached或Redis这样的缓存机器...我只想将QuerySet结果存储在内存中......我还想在这个缓存的Queryset中使用Managers.
提前谢谢,抱歉我的英语不好.
我想知道我是否可以进入单个查询,某个模型的所有对象,其日期年份等于模型的最大值("日期")年份.例如,使用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)
我需要" 在我的数据库中存储Expo的Expos 列表的最近一年中发生的所有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) 为了提高性能,在我的项目中,大多数模型实例都作为列表值存储在缓存中。但 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 视图一起使用。