小编Inq*_*abi的帖子

Django的年场

我希望我的用户进入他们的出生年份.我不希望他们在表单中键入相同的内容,而是从可用选项中选择年份.我知道如果我需要约会而不是一年,我可以在我的模型中做这样的事情:

class MyModel(models.Model):

    birthday = models.DateField(null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)

我可以在表单中执行此操作,让用户从datepicker中选择日期.

    birthday = forms.fields.DateField(widget=forms.widgets.DateInput(attrs={'type': 'date'}))
Run Code Online (Sandbox Code Playgroud)

对于今年,我可以用一CharField/IntegerFieldchoices类似于已在此已经完成SO回答.

import datetime
YEAR_CHOICES = [(r,r) for r in range(1984, datetime.date.today().year+1)]

year = models.IntegerField(_('year'), choices=YEAR_CHOICES, default=datetime.datetime.now().year)
Run Code Online (Sandbox Code Playgroud)

然而,问题是,从2018年到2019年,当前年度的变化不会改变现有的选择.

你能帮忙或提供一些提示来实现我想做的事吗?

python django django-models

9
推荐指数
3
解决办法
7999
查看次数

在Django Admin中限制/过滤外键选择

考虑一个人们可以参加比赛的应用程序.

我有一个ContestContestProblem模型准备好了.我想为比赛提供以下功能:

  1. 比赛可能有很多问题
  2. 一个问题不能出现在多个比赛中

在我models.py,我有:

class ProblemsInContest(CreateUpdateDateModel):
    contest = models.ForeignKey(Contest)
    problem = models.ForeignKey(ContestProblem)

    class Meta:
        verbose_name = "Problem in Contest"
        verbose_name_plural = "Problems in Contest"

    def __str__(self):
        return "{problem}".format(problem=self.problem)
Run Code Online (Sandbox Code Playgroud)

在我的admin.py中,我有:

class ContestProblemInline(admin.TabularInline):
    model = ProblemsInContest
    extra = 1


class ContestAdmin(admin.ModelAdmin):

    inlines = [
        ContestProblemInline,
    ]
Run Code Online (Sandbox Code Playgroud)

这就是我的管理表单的外观: 在此输入图像描述

我正在使用Django Admin为比赛添加问题.问题在于,在问题下拉菜单中,它向我显示了所有内容,ContestProblem但我想将其限制为仅ContestProblem出现在任何其他比赛中的内容.

任何提示或建议或参考,以达到预期的结果将受到高度赞赏.

python django django-admin

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

django 中找不到静态文件错误

我知道这个问题已经在这里被问过好几次了。我搜索并阅读了许多答案,但没有帮助。我想,我错过了一些非常基本的东西。

在我的 settings.py 中,我有:

STATIC_URL = '/static/'
STATIC_ROOT = join(APPS_DIR, "static/")
# STATICFILES_DIRS = [join(APPS_DIR, 'static')]

MEDIA_ROOT = join(APPS_DIR, 'media')
MEDIA_URL = "/media/"
Run Code Online (Sandbox Code Playgroud)

在我的 config/urls.py 中,我有:

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)

我有一个文件,/static/core/js/jquery_countdown/jquery.countdown.min.js我试图将其加载到模板中,如下所示:

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<script type="text/javascript" src="{% static 'core/js/jquery_countdown/jquery.countdown.min.js' %}"> </script>
Run Code Online (Sandbox Code Playgroud)

同一模板的顶部看起来像

{% extends "contest/base.html" %}
{% load static %}
Run Code Online (Sandbox Code Playgroud)

这会导致以下服务器错误:

[23/Mar/2018 10:12:08] "GET /static/core/js/jquery_countdown/jquery.countdown.min.js HTTP/1.1" 404 1858
Run Code Online (Sandbox Code Playgroud)

我缺少什么?

python django django-staticfiles

3
推荐指数
1
解决办法
1万
查看次数

pythonic 方法将字典展平或扩展为 python 中的字典列表

我有一本字典,其值为列表对象。

{'a': [1, 2, 3], 'b': [4, 5, 6]}
Run Code Online (Sandbox Code Playgroud)

我想将字典扩展为以下内容(由于缺乏正确的词):

 [{'a': 1, 'b': 4}, {'a': 2, 'b': 5}, {'a': 3, 'b': 6}]
Run Code Online (Sandbox Code Playgroud)

我有一个解决方案,对我来说看起来有点非Pythonic、丑陋和hackish。

def flatten_dict(d: dict) -> list[dict]:
    """
    get [{'a': 1, 'b': 4}, {'a': 2, 'b': 5}] from {'a': [1, 2], 'b': [4, 5]}

    :param d: dict object
    :return: list of dicts
    """
    values = list(d.values())
    val_zip = list(zip(*values))

    keys = [list(d.keys())] * len(values[0])

    bonded_vals = list(zip(keys, val_zip))
    return list(map(lambda p: dict(zip(p[0], p[1])), bonded_vals))
Run Code Online (Sandbox Code Playgroud)

请帮助/指导我找到一个合适的 Python 功能,该功能可以执行类似的操作并提高代码的可读性。

python dictionary python-3.x

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