我在各种项目中使用AbstractBaseUser作为我的用户模型.更新到Django 1.8 RC1工作顺利,我可以运行迁移管理命令.但是,当尝试从头创建一个新的数据库表布局时,我收到以下错误:
python manage.py migrate
>>> ...
>>> ...
>>> django.db.utils.ProgrammingError: relation "auth_group" does not exist
Run Code Online (Sandbox Code Playgroud)
一切都与Django 1.7.x完美配合,我在其他地方找不到任何关于这个问题的东西.那么,对于RC1版本它是一个大的还是做了一些我在Django 1.8中不知道的变化?不幸的是,错误消息并没有真正帮助......但我很确定它与新的Django版本附带的自动迁移有关.
使用jQuery,我可以测试输入字段是否具有焦点如下:
if ($("...").is(":focus")) {
...
}
Run Code Online (Sandbox Code Playgroud)
不使用jQuery我该怎么做?
就在最近,谷歌推出了他们的图像搜索的新界面.从2013年1月25日起,全尺寸图片会直接显示在Google内部,而不会将访问者发送到源网站.我遇到了一个网站,显然已经开发出一种复杂的方法来阻止用户通过动态引入某种水印来从Google获取图像.要查看此信息,请通过"fansshare.com"在新的Google图片搜索界面上搜索图片.此链接应该有效:Google图片搜索.如果没有,只需在Google搜索输入字段中输入"site:fansshare.com"即可.但请务必使用新的搜索界面.
fansshare.com如何实现这一目标?我无法理解......
更新:
fansshare.com为他们的所有图片网址添加了一个GET参数,例如?rnd = 69.示例图片网址:http: //fansshare.com/media/content/570_Jessica-Biel-talks-Kate-Beckinsale-Total-Recall-fight-5423.jpg?rnd=62
此图片网址适用于几个电话或几秒钟,之后会重定向到缓存的水印图片:http: //fansshare.com/cached/?version = media/content/570 -Jessica-Biel-talks-Kate-Beckinsale -总召回拼-5423.jpg&RND = 5810
编辑:
我们终于设法完全模仿了FansShare的热链接保护,我们在以下广泛的博客文章中发布了我们的发现:
http://pixabay.com/en/blog/posts/hotlinking-protection-and-watermarking-for-google-32/
我在Django 找到了两种实现对称友谊系统的方法(你是我的朋友,所以我也是你的朋友):
正如文档中所建议的那样:
class UserProfile(models.Model):
friends = models.ManyToManyField(User, related_name='friends')
Run Code Online (Sandbox Code Playgroud)
现在,我想让所有"友好"的用户和用户配置模型具有一个select_related-query,如此(应该是反向连接查找):
profiles = UserProfile.objects.filter(user__in=request.user.get_profile().friends.all()).select_related()
Run Code Online (Sandbox Code Playgroud)
我查询userprofile,因为这样,我可以使用select_related()并缓存所有相关对象.
另一方面,我可以将引用friends字段的模型定义为"self",如下所示:
class UserProfile(models.Model):
friends = models.ManyToManyField('self')
Run Code Online (Sandbox Code Playgroud)
现在,我的select_related朋友查找看起来像这样:
profiles = this_user.get_profile().friends.all().select_related()
Run Code Online (Sandbox Code Playgroud)
我总是需要用户对象和它的相关配置文件:第二种方法通过select_related()反向查找更简单,但实际上是相同的.然而,通过使用"self"作为场参考,Django为我处理了对称的友谊.因此,我不必手动在数据库中为每个友谊创建两个条目.Django为我做到了这一点.但是,对称选项仅适用于"自"引用字段.
哪个更好的解决方案?我找不到任何关于它的东西.任何想法赞赏 - 谢谢!
使用 Django,我经常需要向我们的 PostgreSQL 数据库添加新字段。这些字段通常有一个初始值,它们必须设置为 NOT NULL。我的程序包括三个步骤:
1) 添加字段并设置初始值:
ALTER TABLE my_table ADD COLUMN my_field boolean;
UPDATE my_table SET my_field = FALSE;
Run Code Online (Sandbox Code Playgroud)
2)设置非空:
ALTER TABLE my_table ALTER COLUMN my_field SET NOT NULL;
Run Code Online (Sandbox Code Playgroud)
所有三个查询不能一次运行,因为这会导致 PostgreSQL 错误。
执行此任务的最有效方法是什么?我想在单个查询中执行此操作 - 并且一次性添加多个字段。沿着这些路线的东西:
ALTER TABLE my_table ADD COLUMN my_field boolean INITIAL FALSE SET NOT NULL, ADD COLUMN my_field2 boolean INITIAL FALSE SET NOT NULL;
Run Code Online (Sandbox Code Playgroud) 使用HTML5属性"autofocus"对于网页来说非常有用.但是,在Android设备上使用 - 例如 - Firefox(37.0.1)会导致在页面加载时显示软键盘.
<input type="text" name="q" autofocus>
Run Code Online (Sandbox Code Playgroud)
软键盘占用了大量空间,因此我想阻止它打开.同时,自动对焦是我们普通屏幕/设备所需的非常有用的功能.
我尝试在页面加载时通过jQuery删除基于屏幕宽度的"自动对焦"属性,但是,为时已晚.此时,浏览器显然已经接受了该属性并显示了软键盘:
$(function(){
if (window.innerWidth < 600)
$('*[autofocus]').removeAttr('autofocus');
});
Run Code Online (Sandbox Code Playgroud)
有什么建议?
为了避免耗时且昂贵的精确数据库计数查询,我想像这样覆盖count()
Django 管理类中的方法:
from django.contrib import admin
from django.db import connection
class CountProxy:
def __call__(self):
# how to access the queryset `query` here?
query = ...
try:
if not query.where:
cursor = connection.cursor()
cursor.execute("SELECT reltuples FROM pg_class WHERE relname = %s", [query.model._meta.db_table])
n = int(cursor.fetchone()[0])
if n >= 1000: return n # exact count for small tables
return object_list.count()
except:
# exception for lists
return len(object_list)
return estimated_count
class MyAdmin(admin.ModelAdmin):
def get_queryset(self, request):
qs = super(MyAdmin, self).get_queryset(request)
qs.count = …
Run Code Online (Sandbox Code Playgroud) 我有两个模型 - 照片和标签 - 通过ManyToManyField连接.
class Photo(models.Model):
tags = models.ManyToManyField(Tag)
class Tag(models.Model):
lang = models.CharField(max_length=2)
name_es = models.CharField(max_length=40)
name_en = models.CharField(max_length=40)
Run Code Online (Sandbox Code Playgroud)
每隔一段时间,我们就会获得孤立的标签,任何照片都不会引用这些标签.是否有一种删除这些标签的有效方法?我知道这个答案: Django:删除M2M孤儿条目?
我们的解决方案目前看起来像这样:
for tag in Tag.objects.all():
if not tag.photo_set.select_related(): tag.delete()
Run Code Online (Sandbox Code Playgroud)
然而,随着数据库,该脚本的运行变得令人不安的高:-P有正从标签表中的所有标签ID的列表的有效方式,然后从所有的标签ID的列表许多一对多表创建一个交集列表?
在Django中,在推荐的设置中,UserProfile实例由OneToOneField与其User实例链接.
class UserProfile(models.Model):
user = models.OneToOneField(User)
data = ...
Run Code Online (Sandbox Code Playgroud)
检索用户和配置文件的视图中最有效的方法是什么?我可以执行select_related()内连接查询,以获取一个数据库命中的两个对象吗?或者它总是归结为两个单独的电话?可能,Django的auth中间件甚至在调用视图之前检索用户实例...有人知道吗?
django ×5
html ×2
many-to-many ×2
python ×2
user-profile ×2
admin ×1
alter-table ×1
analyzer ×1
autofocus ×1
count ×1
database ×1
ddl ×1
filter ×1
focus ×1
hotlinking ×1
html5 ×1
input ×1
javascript ×1
migrate ×1
mobile ×1
normalize ×1
orphan ×1
performance ×1
postgresql ×1
redirect ×1
spelling ×1
sql ×1