我希望我的用户进入他们的出生年份.我不希望他们在表单中键入相同的内容,而是从可用选项中选择年份.我知道如果我需要约会而不是一年,我可以在我的模型中做这样的事情:
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/IntegerField用choices类似于已在此已经完成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年,当前年度的变化不会改变现有的选择.
你能帮忙或提供一些提示来实现我想做的事吗?
考虑一个人们可以参加比赛的应用程序.
我有一个Contest和ContestProblem模型准备好了.我想为比赛提供以下功能:
在我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出现在任何其他比赛中的内容.
任何提示或建议或参考,以达到预期的结果将受到高度赞赏.
我知道这个问题已经在这里被问过好几次了。我搜索并阅读了许多答案,但没有帮助。我想,我错过了一些非常基本的东西。
在我的 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)
我缺少什么?
我有一本字典,其值为列表对象。
{'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 功能,该功能可以执行类似的操作并提高代码的可读性。