python - 如何通过 __in 过滤另一个模型对象列表
问题描述
嗨我想在两个模型之间进行查询而没有任何连接
我想检查ModelA
模型中的名称是否在User
class ModelA(models.Model):
name = models.CharField(max_length=20)
#others
如何进行查询以按User
模型中已采用的所有名称进行过滤
我试过这些
user_name = User.objects.al()
#and also this
user_name = list(User.objects.all())
#also this
user_name = User.objects.values()
ModelA.objects.filter(name__in=user_name)
我需要返回所有已经在User
模型中使用的名称!他们都没有工作?还有什么其他的东西可以实现这个目标吗?谢谢
解决方案
您需要选择模型的username
值(或其他一些字段)User
。例如:
ModelA.objects.filter(
name__in=User.objects.values_list('username', flat=True)
)
对于某些数据库,例如 MySQL,最好先实现用户名集合:
ModelA.objects.filter(
name__in=list(User.objects.values_list('username', flat=True))
)
但是,如果您想引用表中的记录,则最好使用ForeignKey
[Django-doc]而不是CharField
包含相同用户名的 a。
或者对于 a Form
,您可以使用以下内容填充它:
类 ClientDailyForm(forms.ModelForm): 客户 = forms.ChoiceField(choices=None)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
usernames = list(User.objects.values_list('username', flat=True))
self.fields['values'].choices = [
(c, c)
Client.objects.filter(
name__in=usernames
).values_list('name', flat=True).distinct()
]
class Meta:
model = InvoiceCustomer
fields = '__all__'
推荐阅读
- r - 栅格计算的条件语句 R
- string - 如何在 Haskell 中替换字符串中的多个字符?
- ios - 如何使用目标 C 进行 json 调用
- r - 如何替换R中的转义字符?
- python - 如何在 python PyQt5 中运行儿童 UI?
- google-cloud-platform - 在 GKE、terraform 与控制台中创建私有集群
- java - Java如何在超时后杀死线程而不检查中断
- python-3.x - 从python中的数字周数和季度内的周数获取季度数?
- scala - 如何在Scala中替换/屏蔽地图值的前n位/字符串
- kubernetes - 如何从一个集群中获取 Kubernetes 机密以应用于另一个集群?