我是Django的新手,目前我正在尝试修改一个已有的网站。我正在尝试理解基于某些参数创建图表所涉及的语法。目前,该网站将帐户类型作为参数,并吐出帐户值与年份的关系图。如第一张图所示: Picture of Plot
我感到困惑的部分代码在这里:
tag_ids = [56, 123, 15, 21, 82]
if categories_1:
tag_ids = categories_1.split(',')
tags = []
funding_announced_min = minyear+'-01-01'
funding_announced_max = maxyear+'-12-31'
business_list = []
for d in tag_ids:
tag1 = Tag_objs.objects.get(pk=int(d))
tags.append(tag1)
business_1 = tag1.buisiness.filter(
company__founded_date__gte=funding_announced_min,
company__founded_date__lte=funding_announced_max,
entity_type=0,
)
business_list.append(business1)
tag
是一个帐户类型表,我的混淆来自b usiness_1 = tag1.business.filter
部分。这究竟是做什么的?
我有一个名为biz
的模型,如下所示:
class biz(Ent):
founded_date = models.DateField(blank=True, null=True)
employee_amount = models.IntegerField('Number of Employees',blank=True, null=True)
employee_amount_range = models.CharField(max_length=64, blank=True, null=True)
biz_status = models.CharField(choices=BIZ_STATUS_CHOICES, max_length=32, default='operating', blank=True, null=True)
zipcode = models.CharField(max_length=64, blank=True, null=True)
address = models.CharField(max_length=255, blank=True, null=True)
funding_rounds = models.IntegerField(default=0, blank=True, null=True)
funding_total_usd = models.BigIntegerField(default=0, blank=True, null=True)
first_funding_on = models.DateField(blank=True, null=True)
last_funding_on = models.DateField(blank=True, null=True)
closed_on = models.DateField(blank=True, null=True)
employee_count_min = models.IntegerField(default=0, blank=True, null=True)
employee_count_max = models.IntegerField(default=0, blank=True, null=True)
def __str__(self):
return self.name
class Meta:
verbose_name_plural = "business"
但我可以看到business
的唯一一个模型引用的实例位于verbose_name_plural
。 verbose_name_plural
是否意味着我可以将表biz
称为“业务”? ent
课程在这里:
class Ent(models.Model):
name = models.CharField('Name', max_length=255, db_index=True)
desc = models.TextField('Description')
image = models.ImageField('Logo Image', upload_to='biz', blank=True, null=True, default='biz/default-user110.jpg')
cover_image = models.ImageField('Cover Image', upload_to='biz', blank=True, null=True, help_text='1300 width by 300 height top cover image.')
tags = models.ManyToManyField(Tag,related_name='business', blank=True)
featured = models.BooleanField()
limited = models.BooleanField()
city = models.CharField(max_length=128)
state_province = models.CharField(max_length=128, blank=True, null=True)
region = models.CharField(max_length=128, blank=True, null=True)
country = models.CharField(choices=COUNTRY_CHOICES, max_length=128)
entity_type = models.IntegerField(choices=ENTITY_TYPE_CHOICES)
elevator_pitch = models.CharField(max_length=64, blank=True, null=True)
logo_url = models.URLField(max_length=255, blank=True, null=True)
profile_image_url = models.URLField(max_length=255, blank=True, null=True)
primary_role = models.CharField(max_length=32, blank=True, null=True)
uuid = models.CharField(max_length=128, blank=True, null=True, unique=True)
domain = models.CharField(max_length=255, blank=True, null=True)
slug = models.SlugField(max_length=255, blank=True, null=True, unique=True)
created_at = models.DateTimeField(auto_now_add = True)
updated_at = models.DateTimeField(auto_now = True)
def __str__(self):
return self.name
def get_absolute_url(self):
try:
int(self.slug[-1:])
if self.slug.replace('-', ' ').lower() == self.name.lower():
return reverse('business:biz', kwargs={'slug':slugify(self.name)})
self.slug=slugify(self.name+' '+str(self.pk))
return reverse('business:biz', kwargs={'slug':slugify(self.name+' '+str(self.pk))})
except ValueError:
self.slug=slugify(self.name)
return reverse('business:biz', kwargs={'slug':slugify(self.name)})
据我所知,类biz
是类ent
的一种类型,而行business.filter
正在对ent
创建的ent
表进行排序模型。如果有人能给我一个关于这条线的简短解释,然后表格如何沟通,我会非常感激。如果这有点令人困惑,我很抱歉,我是新人,这是我的第一篇文章。在以前的搜索中我找不到任何类似的东西。
答案 0 :(得分:0)
Biz模型继承自Ent。 Ent与Tag_obj模型具有多对多关系,并将反向访问器定义为business
,这意味着从Tag中可以使用该名称访问相关的Biz对象。
答案 1 :(得分:0)
verbose_name_plural
专为管理界面而设计,而非ORM关系。
关于结构的一些高级建议:
Ent
而不是继承它。这可能会造成一些混乱。try/except
函数中的Ent.get_absolute_url
块,只进行slug解析。clean
方法。Ent
上的Pk字段;那里有SQL注入责任。business:detail
比business:biz
Ent.uuid
中的uuid字段应该有一个default=uuid.uuid4
参数,让您的生活更轻松。如果你打算只使用postgres,还有一个内置的django课程 - https://docs.djangoproject.com/en/2.0/ref/models/fields/#uuidfield