gpt4 book ai didi

django - 同一行的插入正在发生,如果 iti 已经存在于 DB Django-rest-framework,PostgreSQL 中,如何拒绝插入

转载 作者:行者123 更新时间:2023-11-29 13:44:11 25 4
gpt4 key购买 nike

我正在尝试为社交应用创建后端。在数据库中插入 friend 关系的同时,也插入了数据库中已经存在的关系。

例子:用户 1 和用户 2 已经是好友所以,数据库中的行:1,2,3,日期现在数据库不应该再接受同一行,但它正在接受!!!如何拒绝或限制同一行的多次插入。

我的看法:

class Friendship(viewsets.ModelViewSet):
"""Handles Creating Friendship"""
authentication_classes = (TokenAuthentication,)
serializer_class = UserFriendSerializer
permission_classes = (permissions.FriendCreate,IsAuthenticated)
queryset = Friends.objects.all()


def perform_create(self, serializer):
"""Sets the friendship status to user"""

serializer.save(username = self.request.user)

我的序列化器:

class UserFriendSerializer(serializers.ModelSerializer):
"""A serializer for adding and removing Friends"""

class Meta:
model = Friends
fields = ('user_id_1','user_id_2','status',)

def create(self, validated_data):
"""Create user friendship with lesser id in first column"""

friend_1 = validated_data['user_id_1']
friend_2 = validated_data['user_id_2']

if friend_1.pk > friend_2.pk:
temp = friend_1
friend_1 = friend_2
friend_2 = temp

friend = Friends(
user_id_1 = friend_1,
user_id_2 = friend_2,
status = validated_data['status'],
)

friend.save()

return friend

我的模型:

class Friends(models.Model):
'''Friend's or Relationship between user's and their relation status'''
user_id_1 = models.ForeignKey(User,on_delete=models.CASCADE,related_name='user_a')
user_id_2 = models.ForeignKey(User,on_delete=models.CASCADE,related_name='user_b')
status = models.PositiveSmallIntegerField()
friends_on = models.DateTimeField(auto_now_add=True,auto_now=False)

def __str__(self):
"""Returns model as a String"""
return str(self.user_id_1)

class Meta:
verbose_name_plural = "Friends"

最佳答案

如果我理解你是对的,你需要 unique-together

class Friends(models.Model):
"""Friend's or Relationship between user's and their relation status"""
user_id_1 = models.ForeignKey(User,on_delete=models.CASCADE,related_name='user_a')
user_id_2 = models.ForeignKey(User,on_delete=models.CASCADE,related_name='user_b')
status = models.PositiveSmallIntegerField()
friends_on = models.DateTimeField(auto_now_add=True,auto_now=False)

def __str__(self):
"""Returns model as a String"""
return str(self.user_id_1)

class Meta:
verbose_name_plural = "Friends"
unique_together = ("user_id_1", "user_id_2")

关于django - 同一行的插入正在发生,如果 iti 已经存在于 DB Django-rest-framework,PostgreSQL 中,如何拒绝插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51010146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com