前端用户给出这样的输入值:['1','2','3']。我想同时更新多个对象bulk_update
,我尝试了这样的操作,但这给了我这个错误。
ValueError: All bulk_update() objects must have a primary key set.
通过这种类似的方式,我使用bulk_create
工作正常的方法创建了对象,但使用bulk_update
它却不起作用。
这里我想一次更新多个具有不同值的模型对象?
class PVariant(models.Model):
name = models.CharField(max_length=255)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
....
#views
quantity = request.POST.getlist('quantity')
#['1','2','3']
names = request.POST.getlist('names')
fields = ['name', 'price', 'quantity'..]
params = zip(names, quantity, weight,..)
variants = [PVariant(name=param[0],sku=param[1], quantity=param[2], weight=param[3],
product=product) for param in params]
PVariant.objects.bulk_update(variants, fields)
Run Code Online (Sandbox Code Playgroud)
编辑: 从客户端我在视图中获取此类数据。
['name1', 'name2'] names
['12', '1213.0'] field1
['12.0', '12.0'] field2
['1244', '1244'] field3
['11', '11'] field4
['12.0', '12.0'] field5
Run Code Online (Sandbox Code Playgroud) 我想在迁移 django 模型后更改 django 创建的默认权限名称。
文档说在课堂上提供是有效的,但是default_permissions = []
Meta
必须在通过 migrate 创建模型之前在模型上指定它,以防止创建任何遗漏的权限。
但是模型迁移后是否也可以更改权限名称(如果可能的话也可以更改代号)?
class ContactPage(models.Model):
full_name = models.CharField(max_length=255)
email = models.EmailField()
msg = models.TextField()
sent_on = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.full_name
class Meta:
default_permissions = [] # works in the first migrate
permissions = [
('can_view_contacts', 'Can View Contacts'),
('can_delete_contacts', 'Can Delete Contacts'),
]
Run Code Online (Sandbox Code Playgroud) 在这里,我试图更新特定产品的每个产品图像。但它不能正常工作。这里只有第一个对象的图像正在更新。
有一个模板,我们可以在其中一次更新产品和产品图片。与模型ProductImage
有ManyToOne
关系,Product
因此在模板中可以有单个产品的多个图像对象。
更新产品模型工作正常,但在更新 ProductImage 对象时它不起作用。
除了压缩,还有其他方法可以一次更新多个图像对象吗?
编辑:如果我解压缩图像列表,则更新无法正常工作。例如,如果我更改一个对象的图像,则另一个对象的图像也会更改。 但是当我更改所有图像对象图像时,更新工作正常。当我只更改某些对象时,它无法正常工作。
当我压缩然后图像列表时,这是错误回溯。
Traceback (most recent call last):
File "venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "venv\lib\site-packages\django\core\handlers\base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "\venv\lib\site-packages\django\views\generic\base.py", line 73, in view
return self.dispatch(request, *args, **kwargs)
File "\venv\lib\site-packages\django\views\generic\base.py", line 101, in dispatch
return handler(request, *args, **kwargs)
File "dashboard\product\views\views.py", line 293, in post
p.save()
File "venv\lib\site-packages\django\db\models\base.py", line 751, in save
force_update=force_update, update_fields=update_fields)
File "venv\lib\site-packages\django\db\models\base.py", line …
Run Code Online (Sandbox Code Playgroud) 这里我有一个 Bootstrap 模式。我的要求是当我使用提交按钮成功提交表单时,我想在几秒钟后关闭模式。这里的问题是,当我在输入中输入一些文本而不是整数时,或者如果我输入一些无效的输入,然后当我单击提交按钮时,输入字段会显示错误,并且模式会在几秒钟后立即关闭。
如果单击提交按钮时输入字段无效,我不想关闭引导模式。
我该怎么做 ?
编辑:它在有效输入的情况下完美工作。
html
<div class="modal-body">
<form action="">
<input type="number" name="rows" min="0" value="0" max="10" required><br>
<button type="submit" id="my_button" class="btn btn-info btn-sm">Submit</button>
</form>
</div>
Run Code Online (Sandbox Code Playgroud)
脚本
<script>
$('#my_button').click(function() {
setTimeout(function() {$('#myModal').modal('hide');}, 4000);
});
</script>
Run Code Online (Sandbox Code Playgroud) 在这里,我正在编写自定义模板过滤器,以便突出显示匹配的搜索文本。但它无法正常工作。这里发生的情况是,它仅突出显示完全匹配的文本。例如,如果我搜索,django
但如果在标题中,它是Django
它忽略了Django
.
我想让它不区分大小写,这样如果用户搜索django
,那么DJANGO
也应该突出显示。
register = template.Library()
@register.filter(name='highlight')
def highlight(text,search):
highlighted = text.replace(search, '<b class="text text-danger">{}</b>'.format(search))
return mark_safe(highlighted)
Run Code Online (Sandbox Code Playgroud)
视图.py
def search_blogs(request):
q = request.GET.get('q')
if q:
blogs = Blog.objects.filter(title__icontains=q).order_by('-created')
return render(request,'blog/search_blogs.html',{"blogs":blogs,'q':q})
else:
messages.error(request,'Please enter some keyword to search')
return redirect('blog:blogs')
Run Code Online (Sandbox Code Playgroud)
模板
{{blog.title|highlight:q}}
Run Code Online (Sandbox Code Playgroud) 在这里,我没有从数据库中删除模型对象。我只是is_deleted
在删除时将状态更改为 True。但是在这样做时unique=True
会为已删除的对象带来错误,那么我该如何处理呢?
我想is_deleted=True
从唯一的 True 中排除对象。
class MyModel(models.Model):
name = models.CharField(max_length=20, unique=True)
is_deleted = models.BooleanField(default=False)
#views
class MyViewSet(ModelViewSet):
serializer_class = MySerializer
queryset = MyModel.objects.all()
def destroy(self, request, *args, **kwargs):
object = self.get_object()
object.is_deleted = True
object.save()
return Response(status=status.HTTP_204_NO_CONTENT)
Run Code Online (Sandbox Code Playgroud) 在这里,我有一个视图CrawlerHomeView
,用于从表单创建任务对象,现在我想用 celery 定期安排此任务。
我想CrawlerHomeView
用任务对象 search_frequency 并通过检查一些任务对象字段来安排这个过程。
任务模型
class Task(models.Model):
INITIAL = 0
STARTED = 1
COMPLETED = 2
task_status = (
(INITIAL, 'running'),
(STARTED, 'running'),
(COMPLETED, 'completed'),
(ERROR, 'error')
)
FREQUENCY = (
('1', '1 hrs'),
('2', '2 hrs'),
('6', '6 hrs'),
('8', '8 hrs'),
('10', '10 hrs'),
)
name = models.CharField(max_length=255)
scraping_end_date = models.DateField(null=True, blank=True)
search_frequency = models.CharField(max_length=5, null=True, blank=True, choices=FREQUENCY)
status = models.IntegerField(choices=task_status)
Run Code Online (Sandbox Code Playgroud)
任务.py
如果任务状态为 0 或 1 且未超过任务抓取结束日期,我想定期运行下面发布的视图 [期间 =(任务的搜索频率时间])。但我卡在这里了。我该怎么做?
@periodic_task(run_every=crontab(hour="task.search_frequency")) # how …
Run Code Online (Sandbox Code Playgroud) 在这里我使用的apply_async
方法与countdown
和expires
参数一些倒计时后执行任务,并在到期日期时间的某些任务。
但我收到了这个错误
Django Version: 3.0.6
Exception Type: TypeError
Exception Value: schedule_task() argument after * must be an iterable, not int
Run Code Online (Sandbox Code Playgroud)
如何解决这个错误?
任务
@periodic_task(run_every=crontab(minute=1), ignore_result=False)
def schedule_task(pk):
task = Task.objects.get(pk=pk)
unique_id = str(uuid4())
Run Code Online (Sandbox Code Playgroud)
意见
form = CreateTaskForm(request.POST)
if form.is_valid():
unique_id = str(uuid4())
obj = form.save(commit=False)
obj.created_by = request.user
obj.unique_id = unique_id
obj.status = 0
obj.save()
form.save_m2m()
# schedule_task.delay(obj.pk)
schedule_task.apply_async((obj.pk),expires=datetime.datetime.now() + datetime.timedelta(minutes=5), countdown=int(obj.search_frequency))
return redirect('crawler:task-list')
Run Code Online (Sandbox Code Playgroud)