Django对象从一个mod

2024-10-03 06:20:29 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的模型

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分组,并将其作为自己的一个对象返回,且仅具有唯一值

例如

^{pr2}$

我需要的是一个只有

PolicyID: 145
Policy: Team 2

PolicyID: 232
Policy: Team 1

在里面,我该怎么做?在

谢谢


Tags: name模型modelmodelspolicymobilelengthmax
3条回答

您将需要两个模型,以及它们之间的外键,例如:

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)

要获取所有策略:

^{pr2}$

要为bob创建一个新的PagerDuty对象,在Team 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)
)

如果要按policy_name查找策略,那么该字段在模型定义中也应该有一个db_index=True。在

您可以像这样组合valuesdistinct方法:

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

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

像这样:

获取所有(ID,Team)元组,使其唯一

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

变成对象

^{pr2}$

相关问题 更多 >