小编Ral*_*alf的帖子

Django Logger:如何记录用户名

我想实现我的Django项目(日志django 1.11Python 3.6)。我正在使用默认的Django记录器。

要获取username日志,我使用了django-requestlogging 1.0.1。到目前为止,除admin超级用户外,我没有任何其他用户。

当我在前端尝试GET请求时,发生错误,提示 'LogSetupMiddleware' is not callable.

  1. 此错误的原因是什么?如何使记录工作?

  2. 如何获取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 django-middleware python-3.x django-rest-framework

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

在 Django 中为模型创造完整历史的最佳方式是什么?

如何为显示字段中旧值和新更改值的模型创建历史记录?

在我看来,我认为为每个具有相同字段的模型创建历史模型,当用户创建新模型或更新第一个模型中的数据时,也会转到第二个模型。

我搜索了很多这个问题,我发现了一个名为 django-reversion 的数据包,但我不明白如何让它存储旧值和新值,如果有人可以帮助我解决这个问题,请告诉我。

django django-models django-views django-rest-framework

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

更改 django 管理中持续时间字段的格式

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)

django django-models django-admin

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

如何通过 annotate() 使用默认值在输出中创建新字段?

在 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)

有办法做到吗?

python django

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

Django CreateView过滤选择字段中的外键

我需要一些有关 Django 2 和 Python 3 的帮助。

\n\n

我正在使用 aCreateView在我的数据库中添加新记录,但我需要为我的表单页面创建一个过滤器Aviso,以使选择字段 (field turma) 仅显示其中的实例representante当前用户的实例。

\n\n

这是我的模型:

\n\n
class 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 django-views

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

Django 2.0.7-执行重命名字段迁移时出现语法错误

我有以下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)

python migration django python-3.x django-2.0

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

Django 模板 - 是否有内置方法可以将当前日期作为“日期”类型而不是“str”类型获取?

我知道我可以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)

可能的解决方案:

  1. 我知道我可以将上下文变量传递给模板,但在我看来它需要代码:

    # 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)

python django django-templates

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

在参数列表中指定嵌套字典键

我有一个迭代字典列表的函数,将指定的键值对返回到新的字典列表中:

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)

python dictionary nested key list

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

如何使用 django 模型 clean() 方法?

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 django-models django-views django-rest-framework

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

如何解决 Django 中的“IntegrityError at /admin/auth/user/add/ UNIQUE constraint failed: user_details_profile.phone”错误?

我正在尝试通过内置的 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)

python django

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