是否可以在参考Django Rest框架中搜索两个字段,其中一个字段通过



我有一个django rest框架项目。我有一个朋友模型,它具有朋友和朋友的模型。朋友是用户包含用户名的用户的外键,而朋友是将成为用户名的字符字段。

我有一个用户名,通过称为序列化的URL传递。我希望它用于搜索两个字段,并查看是否包含Firserer和朋友的用户名。

最好将两个作为Charfields和Store用户名设置在两个方面,或者有一种简单的方法来介绍和结合结果...

现在它检查了朋友...我想检查朋友和friender.username

这是我的代码:

模型:

class Friend(models.Model):
    friender = models.ForeignKey(User, on_delete=models.CASCADE)
    friended = models.CharField(max_length=50)
    status = models.SmallIntegerField()
    blocked = models.BooleanField(default=False)
    favorite = models.BooleanField(default=False)
    created = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return self.friender.username + self.friended

序列化器:

class FriendSerializer(serializers.ModelSerializer):
    class Meta:
        model = Friend
        fields = (
            'friender',
            'friended',
            'status',
            'blocked',
            'favorite',
        )
        depth=2

视图:

from users.models import Friend
from ..serializers import FriendSerializer
from rest_framework import viewsets
class FriendViewSet(viewsets.ModelViewSet):
    queryset = Friend.objects.all()
    lookup_field = 'friended'
    serializer_class = FriendSerializer

您可以使用简单或QuerySet做到这一点。但是,您的朋友和朋友领域都必须均具有相同的格式。因此,选择外国人或Charfield。我会建议外国基金会,然后您只需要向两者添加"相关信息"属性,以避免冲突。像下面的东西。

friender = models.ForeignKey(User, on_delete=models.CASCADE, related_name='friender_user_id')
friended = models.ForeignKey(User, on_delete=models.CASCADE, related_name='friended_user_id')

QuerySet需要Q导入:

from django.db.models import Q
Friend.objects.filter(Q(friender__name__iexact='John Doe') | Q(friended__name__iexact='John Doe')

最新更新