在Django中我可以使用带有if语句的get absolute url来引用其他应用程序吗?

时间:2017-11-30 11:36:01

标签: python django

我可以使用带有if语句的get_absolute_url来引用其他应用程序吗?

另一个django新手问题:

我的django项目有一个客户模型,我想分享多个产品,每个产品都包含在一个应用程序中(例如移动,固定)。

目前,我在移动应用程序中拥有此客户模型:

# mobile/models.py

class Client(models.Model):
    client_code  = models.CharField(max_length=6, unique=True, db_index=True,)
    company_name = models.CharField(max_length=200, blank=False, null=False)
    slug = models.SlugField(db_index=True, unique=True, max_length=200) 

    def get_absolute_url(self):
        return reverse('mobile:mobile_list_by_client',args=[self.slug])

绝对网址会向客户AAA001提供一条路径,例如:“127.0.0.1:8000/mobile/AAA001”。

这是移动应用中的移动产品型号:

# mobile.models.py

class MobileLineIdentifiers(models.Model):

    client_code_1 =  models.ForeignKey(Client, related_name = 'client_mobile' )
    mtn = models.CharField(max_length=11, blank=False, null=False, db_index=True)

    slug = models.SlugField(max_length=200, db_index=True, unique=True)

    def get_absolute_url(self):
        return reverse('mobile:mtn_detail', args=[self.id, self.slug])

我在固定应用中使用Client作为foriegn键:

# fixed/models.py

from mobile.models import Client

class FixedLineIdentifiers(models.Model):
    client_code_3 =  models.ForeignKey(Client, related_name = 'client_fixed' )
    fixed_cli = models.CharField(max_length=11, blank=False, null=False, db_index=True)

    def get_absolute_url(self):
        return reverse('fixed:fixed_detail', args=[self.id, self.slug])

我可以使用get_absolute_url函数中的“if”语句在应用程序之间重复使用移动客户端模型吗?

我想要达成的目标:

# mobile/models.py

class Client(models.Model):

#....
    def get_absolute_url(self):
            # IF mobile:
                   return reverse('mobile:mobile_list_by_client',args=[self.slug])

            # IF fixed: 
                   return reverse('fixed:fixed_list_by_client',args=[self.slug])

我正在努力使用'if'语句引用。我如何区分移动和固定参考?

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用self.client_fixedrelated_name向后关注外键。您使用这些名称是因为您在外键中设置了def get_absolute_url(self): if self.client_mobile.exists(): return reverse('mobile:mobile_list_by_client',args=[self.slug]) elif self.client_fixed.exists(): return reverse('fixed:fixed_list_by_client',args=[self.slug]) else: # return fallback 。有关详细信息,请参阅related objects reference文档:

{{1}}