Как проверить, существуют ли данные в таблице с помощью django - PullRequest
0 голосов
/ 27 июня 2019

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

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

Ответы [ 2 ]

1 голос
/ 27 июня 2019

Предполагая, что в вашем 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 голос
/ 27 июня 2019

Я вижу, вы уже определили 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...