小编Jon*_*Jon的帖子

Python:给定日期和工作日查找给定工作日下一次出现的日期

这有点难以解释,所以如果这没有多大意义,我会道歉.

我有一个程序,我正在做一些调度.其中一个设置是在某些日子每周运行一个任务.例如,每周一,周三和周五.

考虑当前任务安排在1/2/2012(即星期一)的示例,我已经有一堆代码工作到我知道下一个任务运行应该在1/2/2012之后的星期三.我需要做的就是计算周三(2012年1月4日)的实际日期.

我实际上将星期几作为date.weekday()的相应整数,所以在这种情况下我有2代表星期三.

什么是处理这样的事情的最佳方式?我觉得应该有一个相当简单的解决方案,但它不会浮现在脑海中.我正在考虑使用日历对象进行搜索以查找我想要的一周中的某一天,但这似乎有些过分.

python datetime timedelta

9
推荐指数
2
解决办法
4282
查看次数

SimpleListFIlter默认值

我的模型上有一个布尔字段,表示某人是否已取消其成员资格.我正在尝试创建一个自定义SimpleListFilter,允许过滤此字段.

但是,我真的只想显示那些默认没有取消的人.默认情况下是否有选择"否"选项?到目前为止这是我的过滤器:

class CanceledFilter(SimpleListFilter):

    title = 'Canceled'

    # Parameter for the filter that will be used in the URL query.
    parameter_name = 'canceled'

    def lookups(self, request, model_admin):
        return (
            (True, 'Yes'),
            (False, 'No'),
        )

    def queryset(self, request, queryset):

        if self.value() is True or self.value() is None:
            return queryset.filter(canceled=True)
        if self.value() is False:
            return queryset.filter(canceled=False)
Run Code Online (Sandbox Code Playgroud)

编辑:我应该更清楚一点.我特意尝试在Admin界面中执行此操作.当我在admin中将上面的过滤器添加为list_filter时.我在管理页面的侧面有一个过滤器,有3个选项:全部,是和否.

我想要"否"选择或默认情况下不设置任何选项.相反,默认情况下始终设置"全部"选项.是否有一些hacky方式来设置默认筛选器选择或类似的东西.

在他们查看成员时基本上在Admin中,我只想默认显示活动(未取消).如果他们点击"全部"或"是",那么我想显示已取消的.

更新:注意这与Django管理员中的问题默认过滤器相同,但我这个问题现在已经有6年了.接受的答案标记为需要Django 1.4.我不确定这个答案是否仍适用于较新的Django版本,或者仍然是最佳答案.

鉴于另一个问题的答案年龄,我不确定我们应该如何进行.我认为没有办法合并这两者.

django django-admin django-admin-filters

7
推荐指数
2
解决办法
4216
查看次数

Django模型继承与管理系统

我正在尝试构建一个用于管理页面中各种类型内容的系统.例如,页面可以具有文本内容,超链接内容,视频内容等.

在我的建模代码中,我有一个基类:

class ContentItem(models.Model):
    title = models.CharField(max_length=1000)
    page_order = models.IntegerField()
    last_update_date = models.DateTimeField(default=datetime.now())

    class Meta:
      abstract = True
      ordering = ['page_order', 'last_update_date', 'title']
Run Code Online (Sandbox Code Playgroud)

这是所有内容项的基类.页面顺序控制它在页面上的位置,例如page_order = 0的项目应位于页面顶部.接下来,我定义了一些从这个继承的特定内容模型.

class LinkContent(ContentItem):
  url = models.URLField()
  link_text = models.CharField(max_lenth=1000)

class TextContent(ContentItem):
 text = models.CharField()


class VideoContent(ContentItem):
      title = models.CharField()
      video_file = models.FieldField(upload_to = 'videos')
Run Code Online (Sandbox Code Playgroud)

可能会有更多此类内容类型.然后我将定义一个由所有各种内容类型组成的页面模型.理想情况下,我可以根据基类型将所有类型放在关系上.因此,在这个关系中,您将混合使用LinkContents,TextContents和VideoContents.它们将按page_order排序,以确定在呈现模板时页面上的顺序.

class Page(models.Model):
  contents = models.ManyToManyField(ContentItem)
  title = models.CharField()
Run Code Online (Sandbox Code Playgroud)

有没有办法让这样的计划有效?或者与其中的不同类型的模型建立一种关系是否有问题?我知道这是一个很好的解决方案和面向对象编程的立场,基本上使用多态性对我有利,但我不确定它在数据库级别是否有意义.

我是否需要更像这样的东西:

class Page(models.Model):
  video_contents = models.ManyToManyField(VideoContent)
  link_contents = models.ManyToManyField(LinkContent)
  text_contents = models.ManyToManyField(TextContent)
  title = models.CharField()
Run Code Online (Sandbox Code Playgroud)

我知道这会起作用,但我确定页面上对象位置的方案变得更加困难.我需要遍历所有内容关系,按page_order对它们进行排序,然后再渲染它们.

我认为在这两种情况下,我都想在基类上声明一个每个特定内容类型都可以继承的render()方法.这样,如果我有一个ContentItems列表,我可以使用duck typing来渲染它们,而不必担心它们的特定类型.

我的最后一个问题是如何让管理员这个好看?如何在一个视图中轻松查看构成页面的所有ContentItem,以便通过更改page_order轻松移动它们?

感谢您阅读此内容,如果您需要更多信息,请与我们联系.

python django django-models django-admin

6
推荐指数
1
解决办法
2637
查看次数

Django Admin根据其他选择动态禁用字段

我已经构建了一个django模型,其中必需的字段根据用户在其他先前字段上的选择而改变.具体来说,它是一个事件调度应用程序,其中选项根据用户的选择而改变.

某些字段组合只是无效,我将模型设置为检查那些并且不允许它们.但是,在UI中找出正确的组合有点令人困惑.我希望管理员用户界面通过在用户更改其他字段时隐藏或禁用无效字段来帮助解决此问题.

例如,如果用户选择每周重复一次事件,我需要禁用(或理想地删除)所有每日和每月字段,并仅显示每周字段,例如星期几.

此外,如果他们返回并将其更改为每日,则显示或启用的字段需要更改以反映该选择.

我如何设置管理表单以便发生这种情况?我知道这可以通过DOM和javascript来实现,但我正在尝试确定是否有一种内置于Django的机制.我一直在搜索Django文档,但我似乎无法找到它.

有没有人举例说明你是如何做过类似的事情的?

javascript python django django-admin

5
推荐指数
1
解决办法
2537
查看次数

django urls 参数数量可变

我想知道 Django 中是否有一种方法可以让 url 允许在 / 之后有多个参数,其中参数的数量是可变的。

这是我的意思的一个例子:

因此,如果我有一个名为“关于我们”的页面,其网址为 /page/about_us,那么我有一个从“关于我们”链接的页面,称为“联系信息”,它的网址是否为 /page/about_us/contact_info,其下可能有另一个页面,依此类推。

您将如何编写 URL 处理以允许 /page 后跟任意数量的其他页面,中间有斜杠?这似乎对于做面包屑之类的事情很有用,而且还可以使网址非常可读。我只是不知道如何制作正则表达式或视图,可以将路径中的可变页数作为参数。

最好只使用一个正则表达式来捕获 /page/ 之后的所有内容作为一个长参数,然后让视图通过在 / 处拆分来分解它?这样的正则表达式会是什么样子?我似乎无法在正则表达式中包含 / 而不出现问题。

django django-urls django-views

2
推荐指数
1
解决办法
2640
查看次数