如何更改默认的DRF-权限被拒绝的消息来自{"detail":"You do not have permission to perform this action."}于这样的事情,
{"status": False, "message": "You do not have permission to perform this action."}
我发现这个苏答案,但它无助于改变Key的message
我们如何更改视图集和路由器中的查找正则表达式?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
如何修补或模拟“任何未直接调用/使用的函数”?
我有一个简单的单元测试片段
# 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
另外,有什么方法可以在整个测试套件执行期间保留这个模拟/补丁吗?
我有一个模型结构如下,
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呢?
该查询的最大目的是对Task查询集进行排序
Task.objects.filter(job__isnull=True))用于获取排序查询集的 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) 我有一个 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) 如何使用drf-yasg包将示例响应(openapi doc)添加到我的 swagger 文档中?
我是 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)
我一直在寻找删除方法,但我总是发现只有表单的方法并且我不使用表单。谢谢你。
django ×5
python ×4
django-orm ×1
django-views ×1
drf-yasg ×1
f-string ×1
mocking ×1
openapi ×1
python-3.x ×1
python-mock ×1
unit-testing ×1