gpt4 book ai didi

python - Django 查询将一个模型返回为另一个模型

转载 作者:行者123 更新时间:2023-12-01 08:25:34 24 4
gpt4 key购买 nike

我找不到类似的问题(也许是因为我不知道正确的措辞),但这是我的困境。我有两个模型,一个显示另一个模型的关系。

我希望能够比较 html 模板中的“user_list”和“friends_list”,以便在好友关系已存在的情况下确定是否不在“可用用户”部分中显示用户。

但是,“user_list”对象属于 CustomUser 模型类型,“friends_list”对象属于 Friend 模型类型。如何返回 get_friends() 方法的结果,以便我可以从“user_list”查询集中排除这些 friend ,最好通过 pk 来排除,这样我就不必担心字符串比较?

谢谢!

模型.py

class CustomUserModel(AbstractBaseUser, PermissionsMixin):
# Simplified for brevity
username = models.CharFiend(_('username'), unique=True)

class Friend(models.Model):
user1 = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete.models.CASCADE, related_name='user1')
user2 = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete.models.CASCADE, related_name='user2')

objects = FriendManager()

class Meta:
unique_together = ('user1', 'user2')

def __str__(self):
return str(self.user2)

经理.py

class FriendManager(models.Manager):
def is_friend(self, user1, user2):
if not user1 or not user2:
return False
return super(FriendManager, self).get_queryset().filter(user1=user1).filter(user2=user2).exists()

def get_friends(self, user):
return super(FriendManager, self).get_queryset().filter(user1=user)

View .py

class UserList(ListView):
model = get_user_model()
context_object_name = "object_list"
template_name = "users.html"

def dispatch(self, request, *args, **kwargs):
self.user = get_user(request)
return super(UserList, self).dispatch(request, *args, **kwargs)

def get_queryset(self):
return get_user_model().objects.order_by("-date_joined")

def get_friends(self):
if self.user:
return Friend.objects.get_friends(self.user).order_by("user2")
return None

def get(self, request, *args, **kwargs):
return render(request, self.template_name, {
'user_list': self.get_queryset(),
'friends_list': self.get_friends(),
'user': self.user
})

用户.html

{% extends 'base.html' %}
{% block content %}
<h1>Available Users</h1>
{% for user in user_list %}
{% if user not in friends_list %} <!-- This is my pain-point -->
<p>{{ user }}</p>
{% endif %}
{% endfor %}

<h1>Friends</h1>
{% for friend in friends_list %}
<p>{{ friend }}</p>
{% endfor %}
{% endblock content %}

最佳答案

您只需更改查询即可获取CustomUser。因此,查询应该类似于 CustomeUser.objects.filter(user2__user1=self.user) 这将为您提供与 self.user 是好友的 CustomUser 。根据您解释关系的方式,您还应该需要查询 CustomUser.objects.filter(user1__user2=self.user)。这些查询应替换 View 的 get_friends() 方法中的查询。

关于python - Django 查询将一个模型返回为另一个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54271052/

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