如何使用django检查表中是否已经存在数据
我是django框架的新手,正在努力比较数据库中的值。 这是我在models.py中的表格:如何使用django检查表中是否已经存在数据,django,database,Django,Database,我是django框架的新手,正在努力比较数据库中的值。 这是我在models.py中的表格: class Post(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE,) title = models.CharField(max_length=200) content = models.TextField() creationDate = models.DateTimeField(a
class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE,)
title = models.CharField(max_length=200)
content = models.TextField()
creationDate = models.DateTimeField(auto_now_add=True)
lastEditDate = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
class Votes(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE,)
post_id = models.ForeignKey(Post, on_delete=models.CASCADE,)
up_vote = models.PositiveIntegerField(default=0, validators=[MinValueValidator(0), MaxValueValidator(1)])
down_vote = models.PositiveIntegerField(default=0, validators=[MinValueValidator(0), MaxValueValidator(1)])
class Meta:
unique_together = (("user","post_id"),)
我在投票表中有如下数据:
现在,我想在上表中检查“投票”选项卡行中是否已经存在“用户id”和“发布id”。如果存在,则抛出一条消息,如果不在“向上投票”或“向下投票”上添加值,请大家理解我想要的,如果不存在,请让我知道
我试过的代码是:
def chk_table():
user_id = request.user
post_id = id
votes_table = Votes.objects.filter(user_id=user_id, post_id= post_id).exists()
return votes_table
但是这个函数不仅仅是在一行中检查孔表…我看到您已经在
Meta
中定义了unique\u,所以您可以使用try except
from django.db import IntegrityError
try:
# your model create or update code here
except IntegrityError as e:
if 'unique constraint' in e.message:
# duplicate detected
假设这样,在您的url.py
from django.urls import path
from .views import add_vote
urlpatterns = [
path('post/<int:post_id>/vote/add/', add_vote, name='add-vote'),
]
from django.shortcuts import redirect, render
def add_vote(request, post_id):
if request.method == 'POST':
# receive your POST data here
user_id = request.user.id
post_id = post_id
if not Votes.objects.filter(user_id=user_id, post_id=post_id).exists():
Votes.objects.create(**your_data)
redirect('your-desired-url')
else:
# your logic here
您的函数chk_表正按照您所描述的那样执行。不确定问题是什么,你不应该缩短你的函数名。check_table更具可读性您也可以使用Django的get_或create方法。非常感谢您告知我使用了此方法及其有效性。感谢您回答我使用了其他方法,我没有使用此方法,因为我修改了其他错误。