灵感来自问题系列的隐藏特征…,我很想听听你最喜欢的Django技巧或你知道的不太为人所知但有用的功能。
请在每个答案中只包含一个技巧。 添加Django版本要求(如果有的话)。
灵感来自问题系列的隐藏特征…,我很想听听你最喜欢的Django技巧或你知道的不太为人所知但有用的功能。
请在每个答案中只包含一个技巧。 添加Django版本要求(如果有的话)。
当前回答
当我开始的时候,我不知道有一个Paginator,确保你知道它的存在!!
其他回答
使用isapi-wsgi和Django -pyodbc在Windows上使用IIS和SQL Server运行Django !
在视图代码中添加assert False以转储调试信息。
为具有相同结构的遗留表集创建动态模型:
class BaseStructure(models.Model):
name = models.CharField(max_length=100)
address = models.CharField(max_length=100)
class Meta:
abstract=True
class DynamicTable(models.Model):
table_name = models.CharField(max_length=20)
def get_model(self):
class Meta:
managed=False
table_name=self.table_name
attrs = {}
attrs['Meta'] = Meta
# type(new_class_name, (base,classes), {extra: attributes})
dynamic_class = type(self.table_name, (BaseStructure,), attrs)
return dynamic_class
customers = DynamicTable.objects.get(table_name='Customers').get_model()
me = customers.objects.get(name='Josh Smeaton')
me.address = 'Over the rainbow'
me.save()
这假设您拥有具有相同结构的遗留表。您不需要创建一个模型来包装每个表,而是定义一个基本模型,并动态构造与特定表交互所需的类。
在Django 1.2+中使用.exists(),在以前的版本中使用.count(),而不是计算整个queryset来检查是否返回任何结果。
exists()和count()都清除order by子句,并从DB中检索单个整数。然而exists()将总是返回1,而as count可能会返回更高的值,对这些值将手动应用限制。exists()中使用的has_result和count()中使用的get_count的源代码。
因为它们都返回一个整数,所以没有模型实例化,在内存中加载模型属性,也没有大的TextFields在你的DB和应用程序之间传递。
如果你已经计算了查询,.count()计算len(cached_result), .exists()计算bool(cached_result)
效率不高—例1
books = Books.objects.filter(author__last_name='Brown')
if books:
# Do something
效率不高——例2
books = Books.objects.filter(author__last_name='Brown')
if len(books):
# Do something
高效-例1
books = Books.objects.filter(author__last_name='Brown')
if books.count():
# Do something
高效-例2
books = Books.objects.filter(author__last_name='Brown')
if books.exists():
# Do something
在生产环境中自动设置'DEBUG'属性(settings.py)
import socket
if socket.gethostname() == 'productionserver.com':
DEBUG = False
else:
DEBUG = True
由:http://nicksergeant.com/2008/automatically-setting-debug-in-your-django-app-based-on-server-hostname/