我有一个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')