Как проверить, существуют ли данные в таблице с помощью django

Я новичок в фреймворке 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"),) 

У меня есть данные в табло голосования следующим образом: enter image description here

Теперь, что я хочу это проверить в приведенной выше таблице, если 'user_id' и 'post_id' уже существует в строках таблицы голосования, если существует, бросить сообщение, если не добавить значение на upvote или downvote, я думаю, все понимают, что я хочу, если нет, пожалуйста, дайте мне знать .

что-то, что я попробовал, было этим кодом:

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

, но эта функция проверяет таблицу отверстий, а не только в одном ряду ...

0
задан Umerkkk Khan 26 June 2019 в 23:16
поделиться

2 ответа

Предполагая, что в вашем urls.py

from django.urls import path
from .views import add_vote

urlpatterns = [
    path('post/<int:post_id>/vote/add/', add_vote, name='add-vote'),
]

В вашем views.py

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

1
ответ дан Mahmood Al Rayhan 26 June 2019 в 23:16
поделиться

Я вижу, вы уже определили unique_together в Meta, так что вы можете использовать try except

from django.db import IntegrityError

try:
    # your model create or update code here
except except IntegrityError as e: 
    if 'unique constraint' in e.message:
        # duplicate detected
1
ответ дан chamoda 26 June 2019 в 23:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: