我有两种方式写的代码,我看到它们都存在缺陷。还有另一种方法来写这个或者一种方法比另一种更“正确”吗?
def functionOne(subscriber):
try:
results = MyModelObject.objects.filter(
project__id=1,
status=MyModelObject.STATUS.accepted,
subscriber=subscriber).values_list(
'project_id',
flat=True).order_by('-created_on')
except:
pass
def functionOne(subscriber):
try:
results = MyModelObject.objects.filter(
project__id=1,
status=MyModelObject.STATUS.accepted,
subscriber=subscriber)
results = results.values_list('project_id', flat=True)
results = results.order_by('-created_on')
except:
pass
这是有效的代码,这是不正确的代码,我翻录了一个类似的代码块,给出了objects.filter部分的一个例子。请不要浪费时间评论代码的其他部分。我把try / except放在那里强制缩进以在新行(80列)上推送某些元素
答案 0 :(得分:2)
我会这样做:
def functionOne(subscriber):
try:
results = MyModelObject.objects.filter(
project__id=1,
status=MyModelObject.STATUS.accepted,
subscriber=subscriber
).values_list(
'project_id',
flat=True
).order_by(
'-created_on'
)
except:
pass
使用缩进使层次结构更具可读性。但是,这段代码并不是特别好。在视图中直接使用这样的代码应该被视为反模式。对于此类重复代码,模型Manager
可能是更好的选择。
您可能需要阅读http://dabapps.com/blog/higher-level-query-api-django-orm/