所以我决定直接从下载的tar文件中安装python包(技术上是Django应用程序),提取它并使用以下命令:
python setup.py install
Run Code Online (Sandbox Code Playgroud)
但是,在我的site-packages目录中,我发现该软件包安装在同样具有版本号的.egg目录中.他们的目录看起来像这样烦人:
site-packages/django_cms-2.1.3-py2.7.egg/cms
site-packages/django_cms-2.1.3-py2.7.egg/mptt
Run Code Online (Sandbox Code Playgroud)
我需要将软件包作为目录安装,软件包名称没有.egg或版本号,否则Django找不到软件包.它应该是这样的:
site-packages/cms
site-packages/mptt
Run Code Online (Sandbox Code Playgroud)
试图从pip安装相同的包,它工作正常.这是令人沮丧的,所以一些帮助将不胜感激.
我找到了一个讨论相似内容的线程,但它没有提供一个有效的解决方案.
编辑:让我进一步解释一下,python(django)项目无法找到我安装的软件包,因为软件包没有安装在site-packages目录的根目录下.相反,它驻留在.egg目录中.我必须做的是manuall将包移动到root,但是你如何正确安装python包?
另一个编辑:我没有压制easy-install.pth文件,但它没有被PyDev拾取.
我想在Django模型中迭代我的模型字段并检查它们是否为空字符串,并以编程方式在模型save()方法中用null替换它们.这是因为一些CharField需要是唯一的或没有价值.
例:
class Person(models.Model):
name = models.CharField(blank=True, unique=True, null=True)
nick_name = models.CharField(blank=True, unique=True, null=True)
...
age = models.IntegerField()
def save(self, *args, **kwargs):
for field in self._meta.fields: # get the model fields
if field=='':
field = None
super(Person, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
上面抱怨了一个creation_counter,不清楚为什么要尝试将这些值而不是字段值与空字符串进行比较.
这可以手动完成,但我有太多型号....
有什么建议?
编辑:感谢所有试图帮助我的人!:d
似乎对我有用的解决方案由Jazz发布,但他的代码没有出现在他的帖子中.这是我的版本基本相同,但需要额外检查以确保我们只在必要时覆盖:
from django.db.models.Field import CharField as _CharField
class CharField(_CharField):
def get_db_prep_value(self, value, *args, **kwargs):
if self.blank == self.null == self.unique == True and value == '':
value = None
return super(CharField).get_db_prep_value(value, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)