繁体   English   中英

django对象从模型中将两个字段放入一个列表中

[英]django object get two fields into a list from a model

这是我的模特

class pdUser(models.Model):
    Name = models.CharField(max_length=200)
    Mobile = models.CharField(max_length=200) 
    PagerDutyID = models.CharField(max_length=200)
    PagerDutyPolicyID = models.CharField(max_length=200)
    PagerDutyPolicy = models.CharField(max_length=200)  

想要我能够做的是通过PagerDutyPolicy和PagerDutyPolicyID进行分组,并将其作为自己的对象返回,仅使用唯一值

所以例如

Name: bob
PagerDutyPolicyID: 232
PagerDutyPolicy: Team 1

Name: Bill
PagerDutyPolicyID: 232
PagerDutyPolicy: Team 1

Name: Fred
PagerDutyPolicyID: 145
PagerDutyPolicy: Team 2

我需要的是一个只有一个对象

PolicyID: 145
Policy: Team 2

PolicyID: 232
Policy: Team 1

在其中,我该怎么做?

谢谢

这样的事情:

得到所有(ID,团队)元组,使其独一无二

   id_teams = pdUser.objects.values_list('id', 'team', flat=True)
   id_teams = set(id_teams)

变成物体

   import collections
   IDTeam = collections.namedtuple('IDTeam', ['id', 'team'])
   output = [IDTeam(id=id, team=team)
             for id,team in id_teams]

你需要两个模型,它们之间有一个外键,例如:

from django.contrib.auth.models import User

class PagerDutyPolicy(models.Model):
    # the model automatically gets an id field
    policy_name = models.CharField(max_length=200)  

class PagerDuty(models.Model):
    # I'm assuming you wanted these to be related to users who can log in..
    user = models.ForeignKey(User)   
    mobile = models.CharField(max_length=200) 
    policy = models.ForeignKey(PagerDutyPolicy)

要获得所有政策:

PagerDutyPolicy.objects.all()

要为bob创建一个新的PagerDuty对象,在团队1中对其进行操作:

PagerDuty.objects.create(
    user=User.objects.get(username='bob'),  # or create a new user
    mobile='...',
    # policy=PagerDutyPolicy.objects.get(policy_name='Team 1')  # or..
    policy=PagerDutyPolicy.objects.get(id=232)
)

如果您db_index=True policy_name查找策略,则该字段在模型定义中也应该具有db_index=True

您可以组合不同的方法,如下所示:

pdUser.objects.all().values("PagerDutyPolicyID", "PagerDutyPolicy").distinct()

但是,这将生成具有PagerDutyPolicyIDPagerDutyPolicy名称的字段

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM