Django:禁止为用户添加相同的数据

问题描述 投票:0回答:1

我有一个应用程序,用户可以通过它与ManyToMany关系将URL添加到数据库的收藏夹中。因此,每个用户可以有很多URL,每个URL可以有很多用户。我在创建限制以避免为用户添加相同的url时遇到问题。我的意思是我想创建一种机制,可以为用户增加url的时间,但每个用户只能增加一次。

在我的模型中,我有:

from django.db import models
from django.contrib.auth.models import User

class Repository(models.Model):
    url = models.CharField(max_length=250,unique=False)
    user = models.ForeignKey(User,related_name='user',on_delete=models.CASCADE,default='')
    repositorys = models.ManyToManyField(User,related_name='user')

在我看来:

def favorites(request):
    url = request.session.get('url')
    repo = Repository(url=url,user=request.user)
    repo.save()
    repo.repositorys.add(request.user)
    user = User.objects.get(username=request.user.username)
    repos = user.users.all()
    return render(request, 'favorites.html',{'url':url,'repos':repos})

收藏夹功能在模板中的单击按钮上被调用。当我单击上面的函数时,将重定向到/ favorites。问题是,当我再次单击按钮并且以同一用户身份登录时,该URL再次添加到数据库中。刷新favorites.html时也存在同样的问题。有没有解决此问题的逻辑方法?

python django orm restriction
1个回答
0
投票

在模型中使用unique_together在数据库级别管理唯一性

class Repository(models.Model):
    url = models.CharField(max_length=250,unique=False)
    user = models.ForeignKey(User,related_name='user',on_delete=models.CASCADE,default='')


    class Meta:
        unique_together = [['url', 'user']] 

然后,当您想为特定用户添加URL时,请处理唯一性错误以防止用户两次或多次添加特定URL。

try:
   # add a Repository
except IntegrityError:
   # raise an error
© www.soinside.com 2019 - 2024. All rights reserved.