小编JPG*_*JPG的帖子

DRF:自定义权限被拒绝消息

如何更改默认的DRF-权限被拒绝的消息来自
{"detail":"You do not have permission to perform this action."}于这样的事情,
{"status": False, "message": "You do not have permission to perform this action."}

我发现这个苏答案,但它无助于改变Keymessage

django django-permissions django-rest-framework

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

更改 DRF 路由器中的查找正则表达式

我们如何更改视图集和路由器中的查找正则表达式?lookup_field


康德片段

# serializers.py
class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('username', 'email', 'is_staff')


# views.py
class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    lookup_field = 'email'
Run Code Online (Sandbox Code Playgroud)

如果我们尝试访问详细视图,因为/api/v1/users/foo@bar.com/它会引发 404

django django-views django-rest-framework

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

如何模拟任何未直接调用的函数?

长话短说

如何修补或模拟“任何未直接调用/使用的函数”

场景

我有一个简单的单元测试片段

# utils/functions.py
def get_user_agents():
    # sends requests to a private network and pulls data
    return pulled_data


# my_module/tasks.py
def create_foo():
    from utils.functions import get_user_agents
    value = get_user_agents()
    # do something with value
    return some_value


# test.py
class TestFooKlass(unittest.TestCase):
    def setUp(self):
        create_foo()

    def test_foo(self):
        ...
Run Code Online (Sandbox Code Playgroud)

在方法中,我通过调用间接setUp()调用get_user_agents()函数。在此执行过程中,由于尝试访问专用网络,我遇到了异常。那么,在测试过程中如何操作返回数据或整个函数呢?create_foo()socket.timeoutget_user_agents()

get_user_agents

另外,有什么方法可以在整个测试套件执行期间保留这个模拟/补丁吗?

python unit-testing mocking python-mock python-unittest

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

Django 反向查找以获取最新版本

我有一个模型结构如下,

ACTIVE_STATUS = ['waiting', 'loading', 'starting', 'running', 'stopping']
INACTIVE_STATUS = ['stopped', 'finished', 'failed', 'lost']
ALL_STATUS = ACTIVE_STATUS + INACTIVE_STATUS


class Task(models.Model):
    name = models.CharField(max_length=20)


class Job(models.Model):
    task = models.ForeignKey(Task, related_name='jobs')
    timestamp = models.DateTimeField(auto_now_add=True)
    status = models.CharField(choices=zip(ALL_STATUS, ALL_STATUS), max_length=20)
Run Code Online (Sandbox Code Playgroud)

如何将“最新时间戳及其状态”注释到任务查询集中?

我已经设法获得最新的时间戳,

Task.objects.annotate(latest_ts=models.Max(models.F('job__timestamp')))
Run Code Online (Sandbox Code Playgroud)

那么,怎样才能得到对应的status呢?

更新1

该查询的最大目的是对Task查询集进行排序

  1. 零工作(比如说Task.objects.filter(job__isnull=True)
  2. 最新作业=='正在运行'

更新2

用于获取排序查询集的 TaskManager 类

class TaskManager(models.Manager):

    def get_queryset(self):
        qs = super().get_queryset()
        latest_job = models.Max(models.F('job__timestamp'))

        latest_status = models.Subquery(
            Job.objects.filter(
                task_id=models.OuterRef('pk')
            ).values('status').order_by('-timestamp')[:1]
        )

        qs_order = models.Case(
            models.When(job__isnull=True, then=models.Value(2)),
            models.When(latest_status='running', then=models.Value(1)), …
Run Code Online (Sandbox Code Playgroud)

python django django-orm

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

Python 字符串格式化问题与大括号(“{”和“}”)

我有一个 GraphQL 查询字符串

query = """
        {
          scripts(developers: "1") {
          
          ...
          ...
          }
        }
    """
Run Code Online (Sandbox Code Playgroud)

:如何developers使用 Python 字符串格式化技术更改 的值?

到目前为止我所尝试过的

1.使用f字符串

In [1]: query = f""" 
   ...:         { 
   ...:           scripts(developers: "1") { 
   ...:            
   ...:           ... 
   ...:           ... 
   ...:           } 
   ...:         } 
   ...:     """                                                                                                                                                                                                    
  File "<fstring>", line 2
    scripts(developers: "1") {
                      ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

2.使用.format()方法

In [2]: query = """ 
   ...:         { 
   ...:           scripts(developers: "{dev_id}") { 
   ...:            
   ...:           ... 
   ...:           ... 
   ...:           } 
   ...:         } …
Run Code Online (Sandbox Code Playgroud)

python string-formatting python-3.x f-string

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


在 Django 中删除帖子

我是 django 的新手,我正在尝试制作一个 Web 应用程序。我有这个页面页面图像,我想在按下删除按钮时删除一篇文章。我怎样才能做到这一点?这是我的“发布”模式:

class Post(models.Model):
    created_date = models.DateTimeField()
    title = models.CharField(max_length=100)
    profile_image = models.ImageField(upload_to='poze', blank=True, null=True)
    text = models.CharField(max_length=1000, default='Nimic', blank=True)
    user = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)

我一直在寻找删除方法,但我总是发现只有表单的方法并且我不使用表单。谢谢你。

python django

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