让我们说我有一个块集合.12是红色,8是蓝色,5是黄色,1是绿色.我需要创建一个算法,将这些对象输出到一个数组中,彼此相邻,没有红色块,没有蓝色块彼此相邻,等等.输出应该如下所示:
红色,蓝色,红色,蓝色,红色,蓝色,黄色,蓝色,绿色,红色,黄色等.
到目前为止,在我的编程经验中,我来到了不得不写一个算法的地方.我最后一次这样做是在大约两年前为创业公司工作.我在python中实现了这样的算法,但源代码不可用.我记得我花了至少100行创作.
这个算法有名字吗?我不想再次实施它.
class StatusForm(ModelForm):
bases = forms.ModelMultipleChoiceField(
queryset=Base.objects.all(), #this should get overwritten
widget=forms.SelectMultiple,
)
class Meta:
model = HiringStatus
exclude = ('company', 'date')
def __init__(self, *args, **kwargs):
super(StatusForm, self).__init__(*args, **kwargs)
if kwargs.has_key('bases_queryset'):
self.fields['bases'].queryset = kwargs['bases_queryset']
Run Code Online (Sandbox Code Playgroud)
我想在这个表单中添加一个选项,允许我创建一个这样的表单:
form = StatusForm(bases_queryset=Base.objects.filter([...])
Run Code Online (Sandbox Code Playgroud)
但我不知何故需要在该类中"添加"该关键字参数,以便识别它.他们现在的方式,我只是得到这个错误:
__init__() got an unexpected keyword argument 'bases_queryset'
我有两个看起来像这样的模型:
class RouteBase(models.Model):
base = models.ForeignKey("Base")
route = models.ForeignKey("Route")
sequence = models.IntegerField()
class Route(models.Model):
bases = models.ManyToManyField("Base", through="RouteBase", blank=True)
description = models.TextField(blank=True)
#and a few other attributes omitted for brevity
Run Code Online (Sandbox Code Playgroud)
...然后是一个看起来像这样的模型:
class RouteBaseForm(ModelForm):
base = forms.ModelChoiceField(queryset=Base.objects.all(), widget=forms.TextInput)
sequence = forms.IntegerField(widget=forms.HiddenInput)
class Meta:
model = RouteBase
Run Code Online (Sandbox Code Playgroud)
如您所见,序列窗口小部件是隐藏的,因为我希望这个字段由django自动处理.我希望用户只需通过文本框输入Base.序列由文本框的顺序推断.
我创建了一个带有此表单的formset,用于创建/编辑路径中的所有基础:
RouteBaseFormset = inlineformset_factory(Route, RouteBase, form=RouteBaseForm, extra=5, )
Run Code Online (Sandbox Code Playgroud)
创建此formset时,序列字段为空.在保存formset之前我需要用值填充它(否则它将不会验证).我可以想到四种方法
i=1
for form in formset.forms:
form.fields["sequence"].initial = i
i += 1
除了一个问题,这很好.当formset被提交回视图以进行保存时,使用formset创建的所有 5个额外字段都将填入序列值.当用户只想向路线添加2或3个碱基时,这会导致问题.弹出验证错误,因为该表单的必填字段"base"为空.我可以在formset被POST之后运行一些代码,检查是否存在一个base,如果没有,删除序列,但如果我要这样做,我也可以......
当formset为POST时运行一些代码,检查是否已输入Base,如果是,则添加序列,如果没有,则将该字段留空.这样,当您尝试.save()使用formset时,空值确保该特定表单不会放入数据库中.唯一的问题是我不能对表单做任何事情,直到我运行.save(commit=False)我不能做,因为formset不验证.但我可以......
通过复制request.POST变量并手动设置序列来添加序列值,但这看起来非常糟糕. …
for field in FIELDS:
row = []
row.append("<tr>")
row.append("<td>" + str(myform.fields.get(field)) + "</td>")
row.append("</tr>")
custom_fields.append("".join(row))
Run Code Online (Sandbox Code Playgroud)
当我将custom_fields变量提供给模板时,我得到的只是:
<tr><td><django.forms.widgets.CheckboxInput object at 0x1fa7d90></td></tr>
Run Code Online (Sandbox Code Playgroud)
如何才能正确呈现表单?
这就是我最终要做的事情:
form1 = CustomForm1()
form2 = CustomForm2()
form3 = CustomForm3()
for field in FIELDS:
row = []
row.append("<tr>")
row.append("<td>" + str(form1.fields.get(field)) + "</td>")
row.append("<td>" + str(form2.fields.get(field)) + "</td>")
row.append("<td>" + str(form3.fields.get(field)) + "</td>")
row.append("</tr>")
custom_fields.append("".join(row))
Run Code Online (Sandbox Code Playgroud)
所以我可以在一个表中一起显示所有表单字段.
GPL是否要求开源(商业)Web应用程序?
请给出扩展的答案,而不仅仅是"是"/"否",但为什么.
我正在努力让GeoIP与蜂巢一起工作.我发现了这个:http://www.jointhegrid.com/hive-udf-geo-ip-jtg/index.jsp,这似乎正是我想要的.
我建了罐子(我没有java经验,所以我只希望我做了这个部分),将它们添加到我的查询中并得到:
hive> ADD jar hive-udf-geo-ip-jtg.jar;
Added hive-udf-geo-ip-jtg.jar to class path
Added resource: hive-udf-geo-ip-jtg.jar
hive> ADD jar geo-ip-java.jar;
Added geo-ip-java.jar to class path
Added resource: geo-ip-java.jar
hive> ADD file GeoIPCity.dat;
Added resource: GeoIPCity.dat
hive> create temporary function geoip as 'com.jointhegrid.hive.udf.GenericUDFGeoIP';
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.FunctionTask
Run Code Online (Sandbox Code Playgroud)
有没有办法找出到底出了什么问题?return code 1并没有告诉我多少......某处有日志文件吗?
我正在开发一个Google Maps应用程序,该应用程序可以执行以下操作(在低缩放级别):
在地图上打印一堆多边形叠加.这些多边形是使用我在Google Earth中创建的KML文件创建的.基本上这些多边形覆盖了大陆上大陆的大块.其中15个覆盖了整个世界.
在每个多边形叠加层的顶部,会显示一个数字,表示该多边形内存在的点的总数.
我想在地图上显示的点有一个代表国家的字段和一个纬度/经度字段.我得到总数的方法是通过国家代码运行每个多边形的查询,如下所示:
east_europe_total = Point.objects.filter( Q(country_code='TR') | Q(country_code='CZ') ... ).count()
Run Code Online (Sandbox Code Playgroud)
如果我想要跨越一个国家,或者如果我想重新组织我的多边形"扇区",这不是很好.一个更好的解决方案是将KML文件提供给数据库(即PostGIS)并将其全部整理出来.这有可能吗?如果没有,那么将KML文件转换为既可以轻松插入Google地图又可以通过postGIS查询的格式呢?
我有一个视图,从我的网站获取数据,然后将其变成zip压缩的csv文件.这是我的工作代码sans zip:
def backup_to_csv(request):
response = HttpResponse(mimetype='text/csv')
response['Content-Disposition'] = 'attachment; filename=backup.csv'
writer = csv.writer(response, dialect='excel')
#code for writing csv file go here...
return response
Run Code Online (Sandbox Code Playgroud)
它很棒.现在我希望在发送之前压缩该文件.这是我被卡住的地方.
def backup_to_csv(request):
output = StringIO.StringIO() ## temp output file
writer = csv.writer(output, dialect='excel')
#code for writing csv file go here...
response = HttpResponse(mimetype='application/zip')
response['Content-Disposition'] = 'attachment; filename=backup.csv.zip'
z = zipfile.ZipFile(response,'w') ## write zip to response
z.writestr("filename.csv", output) ## write csv file to zip
return response
Run Code Online (Sandbox Code Playgroud)
但那不是它,我不知道如何做到这一点.
我的桌子看起来像这样:
title | slug
------------------------------
The Title | the-title
Another Title | another-title
another title | another-title
Run Code Online (Sandbox Code Playgroud)
我想通过不同的 slug 进行选择,但也希望标题作为结果的一部分返回。多场比赛返回哪个标题,我不在乎。
所以我的结果看起来像这样:
[('The Title', 'the-title'), ('Another Title', 'another-title')]
Run Code Online (Sandbox Code Playgroud) >>> def test(arg1, arg2, arg3=None): pass
>>> test.func_code.co_varnames
('arg1', 'arg2, 'arg3')
Run Code Online (Sandbox Code Playgroud)
我想要的是:
{'args': ('arg1', 'arg2'), 'kwargs': {'arg3': None}}
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这个目标?
我有一个十进制数,我想将其作为 base58 字符串显示在屏幕上。我已经有了:
>>> from base58 import b58encode
>>> b58encode('33')
'4tz'
Run Code Online (Sandbox Code Playgroud)
这看起来是正确的,但是由于数字小于 58,因此生成的 base58 字符串不应该只有一个字符吗?我肯定错过了一些步骤。我认为这是因为我传递的是字符串“33”,而不是数字 33。
当我传入一个直整数时,出现错误:
>>> b58encode(33)
TypeError: a bytes-like object is required (also str), not 'int'
Run Code Online (Sandbox Code Playgroud)
基本上我想用 base58 编码一个数字,以便它使用尽可能少的字符......
django ×5
python ×5
django-forms ×2
algorithm ×1
base58 ×1
database ×1
google-maps ×1
gpl ×1
hive ×1
java ×1
licensing ×1
postgis ×1
sqlalchemy ×1
zipfile ×1