我想将分页与过滤结合起来.由于我有很多过滤器,我不想按GET请求发送它们,因为URL真的很难看.
由于django分页使用GET请求来传递页面参数,我不知道如何将这两种方法结合起来.
任何的想法?
伟大的附加组件将是:我如何将这种方法与表格排序结合起来?:-)
编辑:
实际上它应该像stackoverflow - 用户问题的分页一样工作.如果用户点击页码,则会显示正确的页面,而不会在网址中显示获取参数.
这是被叫的网址. https://stackoverflow.com/api/userquestions.html?page=2&pagesize=10&userId=237690&sort=Recent
但是浏览器中显示的网址很简洁.似乎是ajax.有人知道如何实现这个吗?:)
如果URL没有显示在浏览器的地址栏中,我不关心它是否漂亮.
编辑:解决方案:
使用传递给视图的所有过滤器参数进行ajax更新.这应该可以帮助您开始为您的站点实现ajax:link
因此,GET参数永远不会出现在地址栏中.
我正在使用中间件来获取我的视图和模型中当前登录的用户.这有助于我例如仅返回创建或分配给登录用户的对象.请点击此链接查看我使用的中间件.
我将此中间件称为:
get_current_user()
Run Code Online (Sandbox Code Playgroud)
到目前为止这个工作正常.但现在我经历了一些奇怪的行为,只针对一个特殊的用例.
我在自定义管理器中使用此get_current_user()仅返回当前登录用户所属的项目.成员资格通过"ProjectMembership"模型定义.这个模型看起来像这样:
class ProjectMembership(models.Model):
project = models.ForeignKey(Project)
member = models.ForeignKey(User, related_name='project_membership_member_set')
day_rate = models.PositiveIntegerField(max_length=11)
Run Code Online (Sandbox Code Playgroud)
在项目模型中,我设置了一个名为user_objects的自定义管理器.项目模型看起来像这样(简化):
class Project(models.Model):
name = models.CharField(max_length=100)
#Managers
objects = models.Manager()
user_objects=UserProjectManager()
Run Code Online (Sandbox Code Playgroud)
UserProjectManager()现在是我的关注点.经理看起来像这样:
class UserProjectManager(models.Manager):
def get_query_set(self):
print "current user is" + str(get_current_user())
return super(UserProjectManager, self).get_query_set().filter(projectmembership__member=get_current_user())
Run Code Online (Sandbox Code Playgroud)
我添加print "current user is" + str(get_current_user())
了以便调试它.这个打印声明总是!打印出当前登录的用户.当我创建此函数时,服务器(manage.py runserver)正在运行,我没有重新启动服务器,并且该方法按照我的预期运行.
但是,如果我使用manage.py runserver重新启动服务器,则UserProjectManager()会因此错误而崩溃:
caught an exception while rendering: Incorrect integer value: 'AnonymousUser' for column 'member_id' at row 1
Run Code Online (Sandbox Code Playgroud)
我上传了错误页面:链接
有趣的是,当我让服务器运行时(在抛出错误之后)然后在我的源代码中更改某些内容(添加一个符号并删除它)并保存它(在我的项目中的某个地方,无所谓! ),再次点击抛出错误的链接,它的工作原理!更有趣的是
print "current user is" + str(get_current_user()) …
Run Code Online (Sandbox Code Playgroud) 我有一个表单,我在clean方法中验证ProjectMembership对象是否已经存在,具有相同的项目和成员值.这是因为我在ProjectMembership模型中为项目和成员定义了unique_together约束.这实际上很好.
class ProjectMembershipForm(forms.ModelForm):
project = forms.ModelChoiceField(Project.objects, widget=HiddenInput())
class Meta:
model = ProjectMembership
def clean(self):
cleaned_data = self.cleaned_data
project = cleaned_data.get("project")
member = cleaned_data.get("member")
print ProjectMembership.objects.filter(project=project, member=member).count()
if ProjectMembership.objects.filter(project=project, member=member).count() > 0:
del cleaned_data["project"]
del cleaned_data["member"]
raise forms.ValidationError('The user "%s" is already part of the project team for project "%s".' % (member, project))
return cleaned_data
Run Code Online (Sandbox Code Playgroud)
但现在我问自己如何在干净方法中判断用户是否尝试创建新关系或更新关系.因为使用这种干净的方法,无法进行更新,因为它返回条目已存在的错误消息.
有没有办法使用.js变量作为Django模板url反向调用中的参数?下面的方法不起作用,这不是很令人惊讶:
"fnRender": function ( o, val ) {
return '<a href="{% url update_task o.aData[0] %}">' + o.aData[1] +'</a>';
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过Django视图传递所需的数据,但不幸的是我必须使用.js库中的数据.
我在Contact模型中定义了一个unicode()方法.
def __unicode__(self):
return u'%s %s' % (self.first_name, self.last_name)
Run Code Online (Sandbox Code Playgroud)
现在我想在模板中显示unicode()方法的返回值.
但我尝试的一切都失败了.
{{ object.unicode }}
Run Code Online (Sandbox Code Playgroud)
要么
{{ object.unicode() }}
Run Code Online (Sandbox Code Playgroud)
要么
{{ object.__unicode__ }}
Run Code Online (Sandbox Code Playgroud)
要么
{{ object.str }}
Run Code Online (Sandbox Code Playgroud)
这让我很困惑,因为我有另一个模型级函数,可以从模板中引用而没有问题.
这很好用:
def get_id(self):
return "%i" % self.id
{{ object.get_id|escape }}
Run Code Online (Sandbox Code Playgroud) 我的postgresql数据库中有一个表,持有一小时记录状态.对于每个月,项目和用户我只需要一个州.我正在使用get_or_create方法创建"状态"或检索它(如果它已经存在).
HourRecordState.objects.get_or_create(user=request.user, project=project, month=month, year=year, defaults={'state': 0, 'modified_by': request.user})
在运行了大约两年没有问题之后,我偶然发现我在数据库中有两次HourRecordState的问题.现在,每次调用get_or_create方法时,都会抛出以下错误:
MultipleObjectsReturned:get()返回多个HourRecordState - 它返回2
我想知道如何在我的数据库中有两个相同的记录.有趣的是,它们是在同一时间创建的(秒,未检查毫秒).
我检查了我的代码,我在整个项目中只有一个get_or_create方法来创建这个对象.代码中没有其他创建方法.
得到一个暗示会很棒..
更新:
对象几乎在同一时间创建:第一个对象:2011-10-04 11:04:35.491114 + 02第二个对象:2011-10-04 11:04:35.540002 + 02
和代码:
try:
project_id_param = int(project_id_param)
project = get_object_or_404(Project.objects, pk=project_id_param)
#check activity status of project
try:
is_active_param = project.projectclassification.is_active
except:
is_active_param = 0
if is_active_param == True:
is_active_param = 1
else:
is_active_param = 0
#show the jqgrid table and the hour record state form
sub_show_hr_flag = True
if project is not None:
hour_record_state, created = HourRecordState.objects.get_or_create(user=request.user, project=project, …
Run Code Online (Sandbox Code Playgroud) 第一个问题:如何检索控制器中文本的翻译?
第二个问题:如何检索模板中文本的翻译?
api说有一个.get方法可以翻译一条消息:
http://www.playframework.org/documentation/api/2.0/java/play/i18n/Messages.html
但是我的应用程序无法识别此方法.在eclipse中打开Message.class显示其中有一个.apply方法,用Scala和Java编写!
object Messages {
/**
* Translates a message.
*
* Uses `java.text.MessageFormat` internally to format the message.
*
* @param key the message key
* @param args the message arguments
* @return the formatted message or a default rendering if the key wasn’t defined
*/
def apply(key: String, args: Any*)(implicit lang: Lang): String = {
Play.maybeApplication.flatMap { app =>
app.plugin[MessagesPlugin].map(_.api.translate(key, args)).getOrElse(throw new Exception("this plugin was not registered or disabled"))
}.getOrElse(noMatch(key, args))
}
Run Code Online (Sandbox Code Playgroud)
现在eclipse告诉我,我可以像这样调用这个方法:
> String …
Run Code Online (Sandbox Code Playgroud) 我想添加(已经存在,通过元标记中的权限定义)对组的权限并寻找正确的位置来执行此操作.我必须确保在sync_db命令之后所有组都分配了正确的权限.
我想连接一个post_syncdb信号,但信号docs说:
重要的是此信号的处理程序执行幂等更改(例如,不进行数据库更改),因为如果它在syncdb命令期间也运行,则可能导致刷新管理命令失败.
因此,可能不建议有人在通过sync_db_post信号调用的管理命令中向组添加权限.
我打算像这样设置权限:
class UserProfile(models.Model):
user = models.OneToOneField(User)
company = models.ForeignKey(Company, related_name='user_profiles')
department = models.ForeignKey(Department, related_name='user_profiles')
class Meta:
permissions = (
('admin_section_access', 'Access to front-end admin section'),
)
Run Code Online (Sandbox Code Playgroud)
在管理命令中:
from django.core.management.base import BaseCommand, CommandError
from django.contrib.auth.models import Group, Permission
from django.contrib.contenttypes.models import ContentType
class Command(BaseCommand):
args = 'none'
help = 'Sets the defined group permissions'
def handle(self, *args, **options):
front_end_admin_group, created = Group.objects.get_or_create(name="Front End Admin")
#get the content type for the UserProfile model
user_profile_ct = ContentType.objects.get(app_label='organization', model='userprofile')
admin_section_access_perm …
Run Code Online (Sandbox Code Playgroud) 我想将默认的水平ViewPager与某种垂直ViewPager组合在一起.我的方法是由水平ViewPager提供的片段是子类化垂直ViewPager.
public class SubWebViewFragment extends Fragment, VerticalViewPager {
}
Run Code Online (Sandbox Code Playgroud)
因此,水平ViewPager提供的每个片段应该同时充当VerticalViewPager,构建某种矩阵.另外,我必须有可能去这个矩阵中的某个页面.例如,我想选择水平ViewPager的第2页,在这个页面中,我想要转到垂直ViewPager的第3页.
// pseudo code
HorizontalViewPager.setCurrentItem(1, true);
activeHorizontalPage.getVerticalViewPager.setCurrentItem(2, true);
Run Code Online (Sandbox Code Playgroud)
我对如何解决这个问题感到有些迷茫.
我正在尝试将所选标签栏项目的字体粗细设置为粗体。似乎没有效果。知道什么地方错了。forState: .Normal
可以正常工作, forState: .Selected
没有效果。
let tabBarItem0 = tabBar.items![0] as! UITabBarItem
var selectedImage0 : UIImage = UIImage(named:"ic_tabbar_item_one")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
var fontLight:UIFont = UIFont(name: "HelveticaNeue-UltraLight", size: 12)!
var fontBold:UIFont = UIFont(name: "HelveticaNeue-Bold", size: 12)!
tabBarItem0.image = unselectedImage0
tabBarItem0.selectedImage = selectedImage0
tabBarItem0.title = "Overview"
tabBarItem0.setTitleTextAttributes(
[
NSForegroundColorAttributeName: UIColor.whiteColor(),
NSFontAttributeName: fontLight
], forState: .Normal)
tabBarItem0.setTitleTextAttributes(
[
NSForegroundColorAttributeName: UIColor.whiteColor(),
NSFontAttributeName: fontBold
], forState: UIControlState.Selected)
Run Code Online (Sandbox Code Playgroud) django ×5
android ×1
django-forms ×1
ios ×1
java ×1
javascript ×1
permissions ×1
postgresql ×1
swift ×1
uikit ×1