我开始考虑在我的Django应用程序中进行适当的异常处理,我的目标是尽可能使用它.根据用户友好性,我暗示用户必须始终详细说明究竟出了什么问题.在这篇文章之后,最佳做法是
使用状态为200的JSON响应作为正常响应,并返回(适当的!)4xx/5xx响应以查找错误.这些也可以携带JSON有效负载,因此您的服务器端可以添加有关错误的其他详细信息.
我试着通过这个答案中的关键词谷歌,仍然有更多的问题而不是我的脑海中的答案.
让我们以简单的观点来考虑它
def test_view (request):
try:
# Some code ....
if my_business_logic_is_violated():
# How do I raise the error
error_msg = "You violated bussiness logic because..."
# How do I pass error_msg
my_response = {'my_field' : value}
except ExpectedError as e:
# what is the most appropriate way to pass both error status and custom message
# How do I list all possible error types here (instead of ExpectedError to make …Run Code Online (Sandbox Code Playgroud) 我是否理解正确,如果我使用像这样的命令
Set myRange.formula = “=ROW(mySheet!R12)”
Run Code Online (Sandbox Code Playgroud)
我的宏将导致#NAME?单元格出现错误,如果它运行在俄语Excel上.我的意思是在这种情况下,上面的公式应该是硬编码的
Set myRange.formula = “=??????(mySheet!R12)”
Run Code Online (Sandbox Code Playgroud)
其中СТРОКА是SUM函数的俄语模拟.我不希望Excel足够聪明,可以在运行时翻译公式.那么有什么方法可以解决这个问题,最重要的是,无论languange如何,使宏工作正常的最通用的代码是什么?
我正在使用 Django 1.10,我现在的目标是使 url 可用和不带斜杠。为此,我向 URLConf 文件中的所有 URL 添加了斜杠,然后将APPEND_SLASH变量值设置为True(嗯,这是默认值)。
现在的问题是外部 POST 请求(我无法控制)产生以下错误:
您通过 POST 调用了此 URL,但该 URL 不以斜杠结尾,并且您设置了 APPEND_SLASH。Django 无法在维护 POST 数据的同时重定向到斜杠 URL。将您的表单更改为指向 127.0.0.1:8000/Calendar/AddAccounts/(注意尾部斜杠),或在您的 Django 设置中设置 APPEND_SLASH=False。
他们在Django doc 中提到了这一点,但在网上冲浪几个小时后,我不知道如何解决这个问题。
我也遇到过这个问题,但提议的解决方案对我来说似乎不可接受。它说我必须让用户只用斜杠来调用我的 URL。虽然我知道在其他语言(例如 C#)中可以同时启用这两个选项
我的目标与这个问题中提出的问题非常相似,但是是从 DRF 的角度来看,而不是从表单的角度来看。
所以基本上问题是,如何在以下代码片段中获取新创建的对象:
TestSerializer(serializers.ModelSerializer)
class Meta:
fields = '__all__'
model = TestModel
class TestView(generics.CreateAPIView):
serializer_class = TestSerializer
def create(self, request, *args, **kwargs):
response = super(TestView, self).create(request, *args, **kwargs)
created_model_instance = .... ?
print(created_model_instance.id)
return response
Run Code Online (Sandbox Code Playgroud) 我发现了很多关于如何在Excel中进行的讨论,但我的目标是捕获REF!VBA中的错误,而不是Excel本身.可能吗 ?
我有一个简单关系的模型
class Tasks(models.Model):
initiator = models.ForeignKey(User, on_delete = models.CASCADE)
class TaskResponsiblePeople(models.Model):
task = models.ForeignKey('Tasks')
auth_user = models.ForeignKey(User)
Run Code Online (Sandbox Code Playgroud)
我需要编写一个SQL查询的模拟,如下所示:
select a.initiator, b.auth_user
from Tasks a
inner join TaskResponsiblePeople b
on TaskResponsiblePeople.task_id = task.id
where Tasks.initiator = 'value A' OR TaskResponsiblePeople.auth_user = 'value B'
Run Code Online (Sandbox Code Playgroud)
问题是OR语句处理两个不同的表,我不知道正确的Django语法来模仿上面提到的原始SQL查询.请帮帮我!
更新1
根据下面给出的答案,我使用以下代码:
people = TaskResponsiblePeople.objects.filter(Q(task__initiator = request.user.id)|Q(auth_user = request.user.id)).select_related('auth_user')
print people.query
# The result of the print copy-pasted from console
# SELECT * FROM `task_responsible_people`
# LEFT OUTER JOIN `tasks` ON (`task_responsible_people`.`task_id` = `tasks`.`id`)
# LEFT OUTER …Run Code Online (Sandbox Code Playgroud) 经过一年的 Django 经验,我发现我不太确定我related_names是否正确使用了 Django 。
想象一下我有三个模型
classA(models.Model):
pass
classB(models.Model):
pass
classC(models.Model):
modelA = models.ForeignKey(classA)
modelB = models.ForeignKey(classB)
Run Code Online (Sandbox Code Playgroud)
美好的。现在我正在考虑添加related_name到 classC 的 modelA 和 modelB,但令人沮丧的是我不能对两个字段使用相同的名称。换句话说,这段代码显然是错误的
classC(models.Model):
modelA = models.ForeignKey(classA, related_name = 'classC') # wrong
modelB = models.ForeignKey(classB, related_name = 'classC') # wrong
Run Code Online (Sandbox Code Playgroud)
另一方面,提出这样的方法:
classC(models.Model):
modelA = models.ForeignKey(classA, related_name = 'classA') # wrong
modelB = models.ForeignKey(classB, related_name = 'classB') # wrong
Run Code Online (Sandbox Code Playgroud)
会导致一个非常具有误导性(至少对我而言)的代码。考虑一下:
obj = classA.filter(classC__in = classA_qs)
Run Code Online (Sandbox Code Playgroud)
所以这样的命名会导致非常具有破坏性的代码classC = classA_instance。
在命名related_names方面的最佳实践是什么。我对 ManyToManyFields 有什么遗漏吗?实际上,我有一个大项目,但我从来没有使用过 ManyToManyFields,在示例中总是使用第三个表,如 classC。有什么我想念的吗?
在我的 Django 1.10 项目中,我有一个模型:
class Contact(models.Model):
notes = models.TextField()
Run Code Online (Sandbox Code Playgroud)
...和模型形式:
class ContactForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ContactForm, self).__init__(*args, **kwargs)
for field_name, field in self.fields.items():
field.widget.attrs['class'] = 'form-control input-sm plain'
if field.required == True:
field.widget.attrs['required'] = ''
class Meta:
model = Contact
fields = ('notes',)
Run Code Online (Sandbox Code Playgroud)
对此我有两个问题:
notes字段渲染为divwithcontenteditable=true而不是 textarea 吗?第二个问题有点模糊,所以我将不胜感激有关第一个问题的提示。我已阅读文档,但找不到相关部分:(
这个话题与我正在寻找的内容非常接近,但在几个小时之后仍然没有帮助丰富目标.我只是想通过编辑原始的Bootstrap.css文件来降低bootstrap tab pill的高度.
我从外部资源中删除了原始文件链接,并将原始代码放在css部分中,以便可以进行实验
<ul class="nav nav-pills" id="task_management_tab">
<li class="active"><a data-toggle="pill" href="#tasks_private">A</a></li>
<li><a data-toggle="pill" href="">B</a></li>
<li><a data-toggle="pill" href="">C</a></li>
<li><a data-toggle="pill" href="">D</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud) 最好用例子来描述:
看法:
def my_view(request):
obj_old = Inventories.objects.get(id = source_id)
obj_new = obj_old
obj_old.some_field = 0
obj_old.save()
obj_new.some_field = 1
obj_new.id = None
obj_new.save()
Run Code Online (Sandbox Code Playgroud)
问题是,我做出obj_new的变化也适用于obj_old使的值some_field是1两obj_old和obj_new。任何想法如何解决这一问题 ?