获取模型过滤器以显示活动值的计数 [英] Getting model filters to show count of active values

查看:50
本文介绍了获取模型过滤器以显示活动值的计数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有2个已连接的模型。



模型1是 userprofiles ,模型2是 events < br>
每个用户可以有多个事件...每个事件可以处于活动状态或停用状态。



我在模板中有一个for循环,显示了所有用户配置文件...但是我还想显示每个用户有多少活动事件。

  today = datetime.now()。strftime ('%Y-%m-%d')
perm = Permission.objects.get(codename ='chef_user')
user_profiles = User.objects.filter(profile__user_profile_active ='y')。filter (is_active = True).filter(Q(groups__permissions = perm)| Q(user_permissions = perm))。distinct()[:6]

在模板中有我的循环

  {%for user_profiles中的kitchen_list%} 
-代码-
{{kitchen_list.events_set.count}}< ---我想在哪里显示活动事件
--CODE--
{%endfor %}

我的模型:



<$ p $ > class UserProfile(models.Model):

EVENT_TYPE =(('0', Apartment),('1', Home),)
CURRENCY =((('R', Rand),)
OPTIONS =((('y', Yes),('n', No),)
OPTIONS_USER =(( 'y',是),('n',否),('p',待定),)

user = models.OneToOneField(User,related_name ='profile ')
phone_regex = RegexValidator(regex = r'^ \ +?1?\d {9,12} $',message =电话号码必须以 +999999999格式输入。最多允许15位数字。)
phone = models.CharField(validators = [phone_regex],max_length = 12,default ='',blank = True)#验证者应为列表

货币= models.CharField(max_length = 50,空白= True,默认='R',选择=货币)
bookingpermissions = models.CharField(max_length = 100,blank = True,默认='n',选择= OPTIONS)
title = models.CharField(max_length = 50,default ='',blank = True)
bio = models.TextField(max_length = 500,default ='',blank = True)
city = models.CharField(max_length = 100,default ='',blank = True)
经度= models.CharField(max_length = 100,default ='na',blank = True)
纬度= models.CharField(max_length = 100,默认='na',blank = True)
图片= ResizedImageField(size = [400,400],作物= ['middle','center'],upload_to = 'userprofile / static / images',default ='',blank = True)
kitchen_type = models.CharField(max_length = 50,blank = True,default ='a',choices = EVENT_TYPE)
user_pro file_active = models.CharField(max_length = 1,default ='n',blank = True,choices = OPTIONS_USER)


class Events(models.Model):

ACTIVE =((('d', Deactivated),('e', Expired),('a', Active),('b', Drafts),)
ALCOHOL =((('0','No带自己的酒'),('1','将有免费的葡萄酒搭配')))

user = models.ForeignKey(User,on_delete = models .CASCADE)
活动=模型.CharField(max_length = 1,默认='b',选择=活动)
标题=模型.CharField(max_length = 50,空白= True,默认='')
description = models.TextField(max_length = 500,blank = True,default ='')
date = models.DateField()
time = models.TimeField()
价格= models.CharField(max_length = 240,blank = True,default ='')
座位= models.IntegerField()
alcohol_choice = models.CharField(max_length = 1,default ='n',选择= ALCOHOL)
starter = models.TextField(max_length = 350,blank = True,默认='')
main_m enu = models.TextField(max_length = 350,blank = True,默认='')
甜点= models.TextField(max_length = 350,blank = True,default ='')
注意=模型。 TextField(max_length = 350,blank = True,default ='')
created_date = models.DateTimeField(auto_now_add = True)
modified_date = models.DateTimeField(auto_now = True)

def __unicode __(self):
return self.title


解决方案

您可以尝试在模型中使用模型属性



  class UserProfile(models.Model):
#您在此处编码
@property
def active_events(self):
返回self.user.events_set.filter(active =' a')。count()

在模板中:

  {{kitchen_list.userprofile.active_events}} 


I have 2 models that are connected.

Model 1 is userprofiles and model 2 is events
each user can have multiple events... each event can be active or deactivated.

I have a for loop in the template showing all the userprofiles... but I also want to show how many active events each user has.

today = datetime.now().strftime('%Y-%m-%d')
perm = Permission.objects.get(codename='chef_user')
user_profiles = User.objects.filter(profile__user_profile_active='y').filter(is_active=True).filter(Q(groups__permissions=perm) | Q(user_permissions=perm)).distinct()[:6]

in the template I have my loop

{% for kitchen_list in user_profiles %}
-- CODE --
{{ kitchen_list.events_set.count }} <--- WHERE I AM TRYING TO SHOW ACTIVE EVENTS COUNT
--CODE--
{% endfor %}

my models:

class UserProfile(models.Model):

    EVENT_TYPE = (('0', "Apartment"), ('1', "Home"),)
    CURRENCY = (('R', "Rand"),)
    OPTIONS = (('y', "Yes"),('n', "No"),)
    OPTIONS_USER = (('y', "Yes"), ('n', "No"),('p', "Pending"),)

    user = models.OneToOneField(User, related_name='profile')
    phone_regex = RegexValidator(regex=r'^\+?1?\d{9,12}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.")
    phone = models.CharField(validators=[phone_regex], max_length=12, default='', blank=True)  # validators should be a list

    currency = models.CharField(max_length=50, blank=True, default='R', choices=CURRENCY)
    bookingpermissions = models.CharField(max_length=100, blank=True, default='n', choices=OPTIONS)
    title = models.CharField(max_length=50, default='', blank=True)
    bio = models.TextField(max_length=500, default='', blank=True)
    city = models.CharField(max_length=100, default='', blank=True)
    longitude = models.CharField(max_length=100, default='na', blank=True)
    latitude = models.CharField(max_length=100, default='na', blank=True)
    image = ResizedImageField(size=[400, 400], crop=['middle', 'center'], upload_to='userprofile/static/images', default='', blank=True)
    kitchen_type = models.CharField(max_length=50, blank=True, default='a', choices=EVENT_TYPE)
    user_profile_active = models.CharField(max_length=1, default='n', blank=True, choices=OPTIONS_USER)


class Events(models.Model):

    ACTIVE = (('d', "Deactivated"), ('e', "Expired"), ('a', "Active"), ('b', "Drafts"),)
    ALCOHOL = (('0','No bring own alcohol'),('1','There will be complimentary wine pairing'))

    user = models.ForeignKey(User, on_delete=models.CASCADE)
    active = models.CharField(max_length=1, default='b', choices=ACTIVE)
    title = models.CharField(max_length=50, blank=True, default='')
    description = models.TextField(max_length=500, blank=True, default='')
    date = models.DateField()
    time = models.TimeField()
    price = models.CharField(max_length=240, blank=True, default='')
    seats = models.IntegerField()
    alcohol_choice = models.CharField(max_length=1, default='n' ,choices=ALCOHOL)
    starter = models.TextField(max_length=350, blank=True, default='')
    main_menu = models.TextField(max_length=350, blank=True, default='')
    dessert = models.TextField(max_length=350, blank=True, default='')
    notes = models.TextField(max_length=350, blank=True, default='')
    created_date = models.DateTimeField(auto_now_add=True)
    modified_date = models.DateTimeField(auto_now=True)

    def __unicode__(self):
        return self.title

解决方案

you can try use model propery

in model:

class UserProfile(models.Model):
     # You code here
     @property
     def active_events(self):
         return self.user.events_set.filter(active='a').count()

in template:

{{ kitchen_list.userprofile.active_events }}

这篇关于获取模型过滤器以显示活动值的计数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆