如何使用django检查表中是否已经存在数据

如何使用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

我是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(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方法。非常感谢您告知我使用了此方法及其有效性。感谢您回答我使用了其他方法,我没有使用此方法,因为我修改了其他错误。