在使用django操作model的时候经常会用到根据id来查找某个对象,我们在官网上看到的是使用get(pk=1)这个方法,比如说:
Student.objects.get(pk=1)
但是我们还可以通过用另外一个方法得到相同的结果:
Students.objects.get(id=1)
还有一种情况能够说明这一点,那就是在StudentAdmin里面有一个字段叫做list_display,相当于table里面的th,
我们可以这样写
list_display = ['pk', 'name‘, 'age']
当但也可以写成:
list_display = ['id', 'question', 'pub_date']
结果显示都是它的主键的值
那么这里面pk和id有什么不同和相同之处呢?
其实大部分情况来说pk和id是一样的,我们知道pk代表primary key的缩写,也就是任何model中都有的主键,那么id呢,大部分时候也是model的主键,所以在这个时候我们可以认为pk和id是完全一样的。
但是有时候不一样?什么时候?是的,你猜到了,当model的主键不是id的时候,这种情况虽然少,但是django为我们想到了,我们来看一下
class Student(model.Model): my_id = models.AutoField(primary_key=True) name = models.Charfield(max_length=32)
这个时候,你可以用pk来找,因为django它知道Student的主键是my_id 但是,如果你用id去找的话,那就对不起,查无此人。
相关推荐
现在,每次需要获取用户的未读消息数时,只需执行 `UserNotificationsCount.objects.get(pk=user_id).unread_count` 即可,这比之前的 `.count()` 查询效率更高。 然而,保持计数器的准确性和实时性是个挑战。...
question = get_object_or_404(Question, pk=question_id) return render(request, 'polls/detail.html', {'question': question}) ``` 这个视图函数获取指定ID的问题并将其渲染到一个模板中。 5. **模板...
user_count, created = UserNotificationCount.objects.get_or_create(user_id=instance.user_id) # 如果是已存在的记录,减少未读消息数 if not created: user_count.unread_count -= 1 user_count.save() @...
每次需要获取用户未读消息数时,直接查询`UserNotificationsCount`即可,例如`UserNotificationsCount.objects.get(pk=user_id).unread_count`,这样显著减少了数据库操作。 接下来,我们需要确保计数器实时更新。...
items = [Product.objects.get(pk=item_id) for item_id in cart.keys()] total_price = sum([item.price * cart[item_id] for item_id, item in cart.items()]) return render(request, 'shopcar/cart.html', {'...
对于删(Delete),可以使用`get_object_or_404`来获取特定ID的对象,然后调用`delete()`方法: ```python from django.shortcuts import get_object_or_404 def delete_user(request, user_id): user = get_...
attachment.post = Post.objects.get(pk=post_id) attachment.save() return redirect('post_detail', post_id=post_id) else: form = AttachmentForm() return render(request, 'blog/add_attachment.html', ...
article = get_object_or_404(Article, pk=article_id) # 检查用户是否有'view_article'权限 permission_required('app.view_article')(request, obj=article) # 或者在视图函数内部检查 if request.user....
post = get_object_or_404(Post, pk=post_id) comments = post.comment_set.all() return render(request, 'blog/post_detail.html', {'post': post, 'comments': comments}) ``` 然后,在`blog/urls.py`中,为...
number = get_object_or_404(NiceNumber, pk=number_id) return render(request, 'nicenum/number_detail.html', {'number': number}) ``` 现在,我们需要创建对应的HTML模板。在`templates/nicenum`目录下创建`...
Post.objects.filter(author__in=User.objects.filter(id=OuterRef('pk'))) ``` - **自定义查询**:可以直接执行原始SQL语句。 ```python from django.db import connection cursor = connection.cursor() ...
author = get_object_or_404(Author, pk=author_id) author.last_accessed = datetime.datetime.now() author.save() return response ``` #### 总结 通过对Django通用视图进行函数包装,我们可以有效地扩展...
article = get_object_or_404(Article, pk=article_id) # 获取上一篇文章 previous_article = Article.objects.filter(pub_date__lt=article.pub_date).order_by('-pub_date').first() # 获取下一篇文章 ...
post = get_object_or_404(BlogPost, pk=post_id) return render(request, 'blog_detail.html', {'post': post}) def blog_create(request): if request.method == 'POST': form = BlogPostForm(request.POST) ...
post = get_object_or_404(Post, pk=post_id) return render(request, 'blog_app/post_detail.html', {'post': post}) def post_new(request): if request.method == 'POST': form = PostForm(request.POST) ...
article = get_object_or_404(Article, pk=id) return render(request, 'blog/article_detail.html', {"article": article}) ``` 视图函数通常会将查询结果或处理后的数据传递给模板,模板再负责将这些数据渲染成...
- 使用`get_object_or_404()`函数获取特定的Model实例,例如`sqlOrder = get_object_or_404(SqlOrder, id=request.GET.get("id"))`。 - 调用`serialize()`函数,传入序列化的格式(这里是'json')和需要转换的对象...
question = get_object_or_404(Question, pk=question_id) return render(request, 'polls/detail.html', {'question': question}) ``` 3. **模板(Templates)**:Django 使用模板语言来生成 HTML 输出。`polls...
post = get_object_or_404(Post, pk=post_id) return render(request, 'blog/detail.html', {'post': post}) ``` **模板(Templates)** `blog/templates/blog`目录下可能包含了`list.html`和`detail.html`这样...