我想实现我的Django项目(日志django 1.11
,Python 3.6
)。我正在使用默认的Django记录器。
要获取username
日志,我使用了django-requestlogging 1.0.1。到目前为止,除admin超级用户外,我没有任何其他用户。
当我在前端尝试GET请求时,发生错误,提示 'LogSetupMiddleware' is not callable.
此错误的原因是什么?如何使记录工作?
如何获取AnonymousUser
日志?
文件settings.py片段:
INSTALLED_APPS= [
...
'django_requestlogging',
]
MIDDLEWARE = [
...
'django_requestlogging.middleware.LogSetupMiddleware',
...
]
LOGGING = {
'version': 1,
'formatters': {
'standard' : {
'format': '%(asctime)s %(username)s %(request_method)s',
},
},
}
Run Code Online (Sandbox Code Playgroud) 如何为显示字段中旧值和新更改值的模型创建历史记录?
在我看来,我认为为每个具有相同字段的模型创建历史模型,当用户创建新模型或更新第一个模型中的数据时,也会转到第二个模型。
我搜索了很多这个问题,我发现了一个名为 django-reversion 的数据包,但我不明白如何让它存储旧值和新值,如果有人可以帮助我解决这个问题,请告诉我。
我django
DurationField
在模型中使用来计算两个DateTimeField
.
在该模型的管理站点上,该字段显示如下:
# short duration
Cumulative Total time: 0:51:33
# longer duration
Cumulative Total time: 2 days, 3:10:21
Run Code Online (Sandbox Code Playgroud)
是否可以将此字段的格式更改为以下给定格式?
Cumulative Total time: 2 days, 3 hours, 10 minutes, 21 seconds
Run Code Online (Sandbox Code Playgroud) 在 SQL 中它将是:
SELECT *, 0 as new_field FROM table;
Run Code Online (Sandbox Code Playgroud)
我以为在 Django 中会是这样
Article.objects.annotate(new_field=0)
Run Code Online (Sandbox Code Playgroud)
但它不起作用;我收到错误:
TypeError: QuerySet.annotate() received non-expression(s): 0.
Run Code Online (Sandbox Code Playgroud)
有办法做到吗?
我需要一些有关 Django 2 和 Python 3 的帮助。
\n\n我正在使用 aCreateView
在我的数据库中添加新记录,但我需要为我的表单页面创建一个过滤器Aviso
,以使选择字段 (field turma
) 仅显示其中的实例representante
当前用户的实例。
这是我的模型:
\n\nclass Turma(models.Model):\n nome = models.CharField(max_length=120, blank=False, null=False, help_text=\'Obrigat\xc3\xb3rio.\')\n alunos = models.ManyToManyField(User, help_text=\'Obrigat\xc3\xb3rio\', related_name=\'alunos_matriculados\')\n data_cadastro = models.DateField(auto_now_add=True)\n representante = models.ForeignKey(User, on_delete=models.PROTECT, blank=False, null=False)\n colegio = models.ForeignKey(Colegio, on_delete=models.PROTECT, blank=False, null=False, help_text=\'Obrigat\xc3\xb3rio.\')\n\nclass Aviso(models.Model):\n data_final = models.DateField(auto_now=False, auto_now_add=False, blank=False, null=False, verbose_name="Data Final")\n comentarios = models.TextField(null=True, blank=True)\n ultima_modificacao = models.DateField(auto_now=True)\n data_post = models.DateField(auto_now_add=True)\n turma = models.ForeignKey(Turma, on_delete=models.PROTECT, null=False, blank=False)\n materia = models.ForeignKey(Materia, …
Run Code Online (Sandbox Code Playgroud) 我有以下Django类:
class Contacto(models.Model):
responsable_documento = models.CharField(primary_key=True, max_length=40)
responsable_tipo_documento = models.CharField(max_length=20)
responsable_nombre = models.CharField(max_length=50, blank=True)
responsable_apellido = models.CharField(max_length=60, blank=True)
responsable_telefono = models.CharField(max_length=20, blank=True)
responsable_telefono_particular = models.CharField(max_length=20, blank=True)
responable_email_uno = models.EmailField()
responsable_email_dos = models.EmailField()
responsable_email_tres = models.EmailField()
cueanexo = models.PositiveIntegerField(null=True)
class Meta:
unique_together = (
('responsable_documento', 'responsable_tipo_documento', 'alumno_documento', 'alumno_tipo_documento'),
)
verbose_name_plural = 'contactos'
Run Code Online (Sandbox Code Playgroud)
我正在尝试重命名一些字段:
class Contacto(models.Model):
responsable_documento = models.CharField(primary_key=True, max_length=40)
responsable_tipo_documento = models.CharField(max_length=20)
responsable_nombre = models.CharField(max_length=50, blank=True)
responsable_apellido = models.CharField(max_length=60, blank=True)
responsable_telefono = models.CharField(max_length=20, blank=True)
responsable_telefono_celular = models.CharField(max_length=20, blank=True)
responable_email1 = models.EmailField() …
Run Code Online (Sandbox Code Playgroud) 我知道我可以str
在 Django 模板中获取当前日期(使用模板标签now
),如下所示:
{% now "Y-m-d" as today_str %}
<p>{{ today_str }}</p>
Run Code Online (Sandbox Code Playgroud)
但我不能将其用于比较:
{% now "Y-m-d" as today_str %}
{% for elem in object_list %}
{% if elem.date < today_str %} {# WRONG: this compares 'date' and 'str' #}
<p>{{ elem.pk }} before today</p>
{# do some other rendering #}
{% endif %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
可能的解决方案:
我知道我可以将上下文变量传递给模板,但在我看来它需要代码:
# in my class-based-view in 'views.py'
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
ctx['today'] = timezone.now()
return ctx …
Run Code Online (Sandbox Code Playgroud)我有一个迭代字典列表的函数,将指定的键值对返回到新的字典列表中:
data = [
{'user': {'login': 'foo1', 'id': 'bar2'}, 'body': 'Im not sure', 'other_field': 'value'},
{'user': {'login': 'foo2', 'id': 'bar3'}, 'body': 'Im still not sure', 'other_field': 'value'},
]
filtered_list = []
keys = ['user','body']
for i in data:
filt_dict = dict((k, i[k]) for k in keys if k in i)
filtered_list.append(filt_dict)
Run Code Online (Sandbox Code Playgroud)
该user
密钥包含一个名为login
;的子密钥。如何将其添加到keys参数列表中,而不是key user
?
示例输出:
filtered_list = [
{'login': 'foo1', 'body': 'Im not sure'},
{'login': 'foo2', 'body': 'Im still not sure'},
]
Run Code Online (Sandbox Code Playgroud) class Restaurant(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=120, unique=True, verbose_name="Name")
direction = models.CharField(max_length=120, verbose_name="Direction")
phone = models.IntegerField()
slug = models.SlugField(blank=True)
def __str__(self):
return self.name
def get_absolute_url(self):
return f'/res/{self.slug}'
@property
def full_name(self):
return self.name
def clean(self):
from django.core.exceptions import ValidationError
if len(str(self.phone))<=5:
raise ValidationError({'phone':('Enter Correct number.')})
Run Code Online (Sandbox Code Playgroud)
clean() 方法不起作用。我的view.py代码如下:
class RestaurantView(generics.ListCreateAPIView):
queryset=Restaurant.objects.all()
serializer_class=RestaurantSerializer
def get(self,request):
query=self.get_queryset()
serializer=RestaurantSerializer(query,many=True)
return Response(serializer.data)
def post(self,request):
serializer = RestaurantSerializer(data=request.POST)
if serializer.is_valid(raise_exception=True):
name=serializer.validated_data.get('name')
direction=serializer.validated_data.get('direction')
phone=serializer.validated_data.get('phone')
r=Restaurant()
r.name=name,
r.direction=direction,
r.phone=phone
r.save()
response={'msg':'Data Saved Successfully'}
return Response(response)
Run Code Online (Sandbox Code Playgroud)
如何处理 …
我正在尝试通过内置的 django 管理员添加一个新用户,但我不断收到此错误。即使尝试通过终端创建超级用户也会出现相同的错误。与用户无关的所有其他模型都可以正常工作。我的models.py 文件中的代码如下。
from django.db import models
from django.db.models.signals import post_save
from django.contrib.auth.models import User
from django.dispatch import receiver
from django.core.exceptions import ObjectDoesNotExist
from general.models import Ward
# Create your models here.
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
firstname = models.CharField(max_length=20)
middlename = models.CharField(max_length=20)
lastname = models.CharField(max_length=20)
loc_id = models.CharField(max_length=8, unique=True)
ward = models.ForeignKey(Ward, related_name="wards", null=True, on_delete=models.SET_NULL)
phone = models.CharField(max_length=10, unique=True)
address = models.CharField(max_length=255)
postal_code = models.CharField(max_length=15)
def __str__(self):
return "{} {}".format(self.user.first_name, self.user.last_name)
class Meta:
verbose_name_plural = "Personal information" …
Run Code Online (Sandbox Code Playgroud) django ×9
python ×5
django-views ×3
python-3.x ×2
dictionary ×1
django-2.0 ×1
django-admin ×1
key ×1
list ×1
migration ×1
nested ×1