我正在尝试使用django-tables2在表的第一列上添加一个计数器,但是下面的解决方案仅在#列下显示全0。我应该如何添加一列,该列将为行编号?
table.py:
import django_tables2 as tables
from profiles.models import Track
import itertools
counter = itertools.count()
class PlaylistTable(tables.Table):
priority = tables.Column(verbose_name="#", default=next(counter))
class Meta:
model = Track
attrs = {"class": "paleblue"}
orderable = False
fields = ('priority', 'artist', 'title')
Run Code Online (Sandbox Code Playgroud)
我的模板:
{% render_table table %}
Run Code Online (Sandbox Code Playgroud) 在我的数据库中,我有一个记录,其中年份字段是2016年,但我需要将其更改为2017年.当我使用Django管理员更改2017年时,我得到"确保此值小于或等于2016".我的模特有什么问题?
class Track (models.Model):
artist = models.ForeignKey(Artist, blank=True, null=True, on_delete=models.SET_NULL, verbose_name="Artist")
title = models.CharField(max_length=100, verbose_name="Title")
year = models.PositiveSmallIntegerField(null=True, blank=True, validators=[MinValueValidator(1900), MaxValueValidator(datetime.datetime.now().year)], verbose_name="Year")
timestamp = models.DateTimeField(default=timezone.now)
Run Code Online (Sandbox Code Playgroud) 我可以在“我的驱动器”的根目录中使用以下代码创建工作表,但如何在“我的驱动器”或“共享驱动器”中的文件夹下创建工作表?
from googleapiclient.discovery import build
service = build(‘sheets’, ‘v4’, credentials=creds)
sheet = service.spreadsheets()
body = {}
results = sheet.create(body=body).execute()
pprint(results)
Run Code Online (Sandbox Code Playgroud) python google-sheets google-drive-api google-api-python-client google-sheets-api
鉴于下面的模型和序列化程序类,当我检索Track细节时,它只会显示Track标题,但不会显示相关的Artist.
在检索Track详细信息时,如何显示Artist名称?
models.py
class Artist (models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Track (models.Model):
artist = models.ForeignKey(Artist, blank=True, null=True, on_delete=models.SET_NULL, verbose_name="Artist")
title = models.CharField(max_length=100, verbose_name="Title")
def __str__(self):
return self.title
Run Code Online (Sandbox Code Playgroud)
serializers.py
class ArtistSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(read_only=True)
name = serializers.CharField()
class Meta:
model = Artist
fields = ('id', 'name')
class TrackSerializer(serializers.ModelSerializer):
class Meta:
model = Track
fields = '__all__'
Run Code Online (Sandbox Code Playgroud) 为什么在python中,我可以使用下面的python示例打印JSON,但是在django模板中,它不起作用?如何在django模板中打印JSON?
蟒蛇:
import requests, json
url = 'https://api.example.com/details'
r = requests.get(url)
json_data = r.json()
json_pretty = json.dumps(json_data, sort_keys=True, indent=4)
print (json_pretty)
Run Code Online (Sandbox Code Playgroud)
django views.py:
def json_list(request):
url = 'https://api.example.com/details'
r = requests.get(url)
json_data = r.json()
json_pretty = json.dumps(json_data, sort_keys=True, indent=4)
context = {
"json_pretty": json_pretty,
}
return render(request, "json_output.html", context)
Run Code Online (Sandbox Code Playgroud)
模板:
<div>{{ json_pretty }}</div>
Run Code Online (Sandbox Code Playgroud) 给定一个函数 process_list,它获取唯一 ID 列表并将列表发送到 API 端点进行处理。列表的限制是一次 100 个元素。
如果我有一个超过 100 个元素的列表,我如何处理前 100 个,然后是接下来的 100 个,直到达到 n?
my_list = [232, 231, 932, 233, ... n]
# first 100
process_list(my_list[:100])
def process_list(my_list):
url = 'https://api.example.com'
data = {'update_list': my_list}
headers = {'auth': auth}
r = requests.put(url, data=json.dumps(data), headers=headers)
Run Code Online (Sandbox Code Playgroud) 我使用 Kubespray 部署了一个裸机集群,并启用了 kubernetes 1.22.2、MetalLB 和 ingress-nginx。404 Not found当设置时尝试访问通过 helm 部署的任何服务时,我得到了ingressClassName: nginx。但是,如果我不使用ingressClassName: nginx而是kubernetes.io/ingress.class: nginx在 helm 图表中使用,一切都会正常工作。yaml。我怎样才能让它工作ingressClassName?
这些是我的 kubespray 设置inventory/mycluster/group_vars/k8s_cluster/addons.yml
# Nginx ingress controller deployment
ingress_nginx_enabled: true
ingress_nginx_host_network: false
ingress_publish_status_address: ""
ingress_nginx_nodeselector:
kubernetes.io/os: "linux"
ingress_nginx_tolerations:
- key: "node-role.kubernetes.io/master"
operator: "Equal"
value: ""
effect: "NoSchedule"
- key: "node-role.kubernetes.io/control-plane"
operator: "Equal"
value: ""
effect: "NoSchedule"
ingress_nginx_namespace: "ingress-nginx"
ingress_nginx_insecure_port: 80
ingress_nginx_secure_port: 443
ingress_nginx_configmap:
map-hash-bucket-size: "128"
ssl-protocols: "TLSv1.2 TLSv1.3"
ingress_nginx_configmap_tcp_services:
9000: "default/example-go:8080"
ingress_nginx_configmap_udp_services:
53: …Run Code Online (Sandbox Code Playgroud) 我正在尝试找出允许用户使用 django-allauth 删除或停用其帐户的最佳方法,并且我假设我需要将 is_active 字段设置为 False。
我的下面的解决方案有几个问题: 1) 呈现的复选框字段 is_active 显示文本“指定此用户是否应被视为活动用户。取消选择此选项而不是删除帐户。” 如何将此文本更改为“如果您确定要删除此帐户,请选中此框。”?
更新:刚刚意识到选中该框将 is_active 设置为 True,而取消选中该框将其设置为 False,所以也许我可能需要使用不同的字段来验证表单?
2) 如何在提交时注销用户?
形式.py:
class DeactivateUserForm(forms.ModelForm):
class Meta:
model = User
fields = ['is_active']
Run Code Online (Sandbox Code Playgroud)
视图.py:
login_required(login_url='/accounts/login/')
def deactivate_user_view(request):
pk = request.user.id
user = User.objects.get(pk=pk)
user_form = DeactivateUserForm(instance=user)
if request.user.is_authenticated() and request.user.id == user.id:
if request.method == "POST":
user_form = DeactivateUserForm(request.POST, instance=user)
if user_form.is_valid():
deactivate_user = user_form.save(commit=False)
user.is_active = False
deactivate_user.save()
return render(request, "account/userprofile_del.html", {
"user_form": user_form,
})
else:
raise PermissionDenied
Run Code Online (Sandbox Code Playgroud)
用户个人资料_del.html:
<h2>Delete your account</h2> …Run Code Online (Sandbox Code Playgroud) 在 Pandas 中,如何&用 '&'替换&可能位于字符串中任何位置的所有列?
例如,在列标题中,如果有一个值“&好坏”,我该如何用“好与坏”替换它?
我正在扩展用户配置文件并添加了一个last_ip字段,如下所示.每当用户登录其当前IP时,如何更新此字段?如果重要,我正在使用allauth.
class UserProfile(models.Model):
user = models.OneToOneField(User)
last_ip = models.GenericIPAddressField(protocol='IPv4', verbose_name="Last Login IP")
location = models.CharField(max_length=50, blank=True)
Run Code Online (Sandbox Code Playgroud) 给定下面的 list1,如何返回一个新列表,其中 'codes' 的值包含字符串 'Two' 但不包含字符串 'One'?
# Example, given list1:
list1 = [{'id': 11, 'codes': ['OneSeven', 'TwoThree']}, {'id': 22, 'codes': ['FiveTwoSix', 'Four', 'FourFive']}, {'id': 33, 'codes': ['SixSeven', 'OneSix']}]
# Return list with element where 'id': 22 since the string 'Two' is in codes but 'One' isn't.
list2 = [{'id': 22, 'codes': ['FiveTwoSix', 'Four', 'FourFive']}]
Run Code Online (Sandbox Code Playgroud) 使用此处的解决方案来验证 URLField,我在运行时收到 ValueError python manage.py makemigrations,但我不确定为什么。我究竟做错了什么?
from django.contrib.auth.models import User
from django.db import models
from django.core.exceptions import ValidationError
from urllib.parse import urlparse
def validate_hostname(*hostnames):
hostnames = set(hostnames)
def validator(value):
try:
result = urlparse(value)
if result.hostname not in hostnames:
raise ValidationError(f'The hostname {result.hostname} is not allowed.')
except ValueError:
raise ValidationError('Invalid URL')
return validator
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.SET_NULL, null=True)
twitter = models.URLField(
blank=True,
null=True,
validators=[validate_hostname('twitter.com', 'www.twitter.com')]
)
Run Code Online (Sandbox Code Playgroud)
追溯
$ python manage.py makemigrations
Migrations for 'userprofiles':
userprofiles/migrations/0002_userprofile_twitter.py
- Add …Run Code Online (Sandbox Code Playgroud)