这个SQL是否有Django ORM最佳实践:
REPLACE app_model SET field_1 = 'some val', field_2 = 'some val';
Run Code Online (Sandbox Code Playgroud)
假设:field_1或field_2在它们上面会有一个唯一的密钥(或者在我的情况下都是两个),否则这将始终评估为INSERT.
编辑:
我现在最好的个人答案就是这个,但这是2-3个查询,其中1应该是可能的:
from django.core.exceptions import ValidationError
try:
Model(field_1='some val',field_2='some val').validate_unique()
Model(field_1='some val',field_2='some val',extra_field='some val').save()
except ValidationError:
Model.objects.filter(field_1='some val',field_2='some val').update(extra_field='some val')
Run Code Online (Sandbox Code Playgroud) 我有两套(虽然我可以做清单,或其他):
a = frozenset(('Today','I','am','fine'))
b = frozenset(('hello','how','are','you','today'))
Run Code Online (Sandbox Code Playgroud)
我想得到:
frozenset(['Today'])
Run Code Online (Sandbox Code Playgroud)
或至少:
frozenset(['today'])
Run Code Online (Sandbox Code Playgroud)
第二种选择是可行的,如果我小写我认为的一切,但我正在寻找一种更优雅的方式.有可能吗?
a.intersection(b)
Run Code Online (Sandbox Code Playgroud)
以不区分大小写的方式?
Django中的快捷方式也很好,因为我正在使用该框架.
下面的交集方法示例(我无法弄清楚如何在注释中获取此格式):
print intersection('Today I am fine tomorrow'.split(),
'Hello How a re you TODAY and today and Today and Tomorrow'.split(),
key=str.lower)
[(['tomorrow'], ['Tomorrow']), (['Today'], ['TODAY', 'today', 'Today'])]
Run Code Online (Sandbox Code Playgroud) 如果我运行这个,其中vote.created_on是一个python日期时间:
import calendar
created_on_timestamp = calendar.timegm(vote.created_on.timetuple())*1000
created_on_timestamp = str(created_on_timestamp)
Run Code Online (Sandbox Code Playgroud)
created_on_timestamp将使用封装刻度线(')打印.如果我做int()或类似的东西,我会得到类似1240832864000L的东西,就JavaScript而言,这不是一个数字(这是我需要使用这些日期时间的地方).
有人知道处理这种情况的最佳方法吗?我应该把长条作为一个字符串并剥去刻度线吗?这看起来很疯狂.
===已编辑的附录===
更大的问题是Django正在将"转换成HTML编码的等价物"(或类似).处理这个问题的最好方法是将long转换为字符串,当模板解析字符串时,使用{{created_on_timestamp | safe将引号标记为引号.
我有一个模型:
CAMPAIGN_TYPES = (
('email','Email'),
('display','Display'),
('search','Search'),
)
class Campaign(models.Model):
name = models.CharField(max_length=255)
type = models.CharField(max_length=30,choices=CAMPAIGN_TYPES,default='display')
Run Code Online (Sandbox Code Playgroud)
一个表格:
class CampaignForm(ModelForm):
class Meta:
model = Campaign
Run Code Online (Sandbox Code Playgroud)
有没有办法限制"类型"字段可用的选项?我知道我可以做一个单值字段:CampaignForm(initial={'name':'Default Name'})但我找不到任何方法为选择集做这个.
对于需要关键字参数'required_arg'的Python方法,最好的样式是什么:
def test_method(required_arg, *args, **kwargs):
def test_method(*args, **kwargs):
required_arg = kwargs.pop('required_arg')
if kwargs:
raise ValueError('Unexpected keyword arguments: %s' % kwargs)
Run Code Online (Sandbox Code Playgroud)
或者是其他东西?我希望将来可以将它用于我的所有方法,所以我正在寻找在Python方法中处理所需关键字参数的最佳实践方法.
我知道我会得到一千个"取决于你想要做什么"的答案,但是说真的,在网上还没有关于这个的可靠信息.以下是我的假设 - 我认为它们现在很多人都很相似:
此时,语言的选择是PHP(Cake,Symfony,Zend),Python(Django),Ruby(Merb).此时我真的介于Django和Merb之间,主要是因为其他人似乎都是这样.
请不要在这里放置任何非主流技术.我知道Merb主要是未经测试的,但他们声明的目标是一个坚实的平台,它背后有很多动力,所以我相信它是可行的.请不要回答Perl有多棒或.Net.
对于未来参考 - 已经做出了以下选择:
干杯,亚当
如果我在Django中有两个模型:
class Blog(models.Model):
author = models.CharField()
class Post(models.Model):
blog = models.ForeignKey(Blog)
Run Code Online (Sandbox Code Playgroud)
我想获得给定博客的所有帖子:
Blog.objects.get(author='John').post_set
Run Code Online (Sandbox Code Playgroud)
如果有一个包含author ='John'但没有帖子的博客,则会引发一个DoesNotExist异常.这是什么最好的解决方案?我可以尝试一下:除了:在前端,一个自定义管理器方法,或者有没有办法通常覆盖Django返回一个空集.就我的目的而言,DoNot Exist没用.
或者,整个问题可以回避:
Blog.objects.select_related('post').get(author='John').post_set.values()
Run Code Online (Sandbox Code Playgroud) 我有一个"在野外"的形式,它采用了许多不同的变量 - 可能会也可能不会填充.
try:
app_version = request.REQUEST["appVersion"]
except:
app_version = ''
try:
app_name = request.REQUEST["appName"]
except:
app_name = ''
try:
app_code_name = request.REQUEST["appCodeName"]
except:
app_code_name = ''
Run Code Online (Sandbox Code Playgroud)
有没有更严格的方法来实现这一目标?
我试图获取列表中每个项目在Python中的字符串中的次数:
paragraph = "I eat bananas and a banana"
def tester(x): return len(re.findall(x,paragraph))
map(tester, ['banana', 'loganberry', 'passion fruit'])
Run Code Online (Sandbox Code Playgroud)
返回[2,0,0]
然而,我想要做的是扩展它,以便我可以将段落值提供给map()函数.现在,tester()函数有段硬编码.有没有人有办法做到这一点(也许是一个n长度的段落值列表)?还有其他想法吗?
请记住,每个数组值在将来的某个时刻都会有权重 - 因此需要将值保留在列表中而不是将它们全部加在一起.
更新:段落通常为20K,列表通常有200多个成员.我的想法是地图并行运行 - 因此它比任何串行方法都更有效率.
我刚刚继承了一个70k的PHP代码库,我现在需要添加增强功能.我看到更糟糕,至少这个代码库使用MVC架构并且面向对象.但是,没有模板系统,许多类都被弃用 - 只被调用一次.我想我的方法可能如下:
我的问题是:我应该采取哪些步骤,或者你会采取什么措施?你处理这个问题的方法是什么?有没有工具可以帮助找到重复的PHP代码?
我有一个来自Windows提供商的700MB XML文件.
正如人们所预料的那样,行结尾是'\ r \n'(或者vi中的^ M).除了让供应商发送'\n'之外,处理这种情况的最有效方法是什么:-)
我对任何需要Python 2.6+的东西都很开放,但它需要在Snow Leopard和Ubuntu 9.10上运行,只需要很少的外部需求.我不介意一个小的性能损失,但我正在寻找标准的最佳方法来处理这个问题.
- - 编辑 - -
行结尾位于标记描述符的中间,否则它们不会是这样的问题.我知道这是一个糟糕的形式,他们不应该发送给我,但这就是我有文件和供应商大多是无能的.