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

Python 在Django中,我可以使用带有if语句的get absolute url引用其他应用程序吗? 我可以使用get_absolute_url和if语句引用其他应用程序吗?,python,django,Python,Django,另一个django新手问题: 我的django项目有一个客户模型,我想在多个产品中共享,每个产品都包含在一个应用程序中,例如移动、固定 目前,我在移动应用程序中有以下客户模型: # mobile/models.py class Client(models.Model): client_code = models.CharField(max_length=6, unique=True, db_index=True,) company_name = models.CharFiel

另一个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])
# 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])
绝对url会生成指向客户AAA001的路径,例如:“127.0.0.1:8000/mobile/AAA001”

这是移动应用程序中的移动产品模型:

# 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])
# 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])
我在固定应用程序中将客户端作为外键:

# 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”语句跨应用程序重复使用移动客户端模型

我想实现的目标是: 我正在努力解决“如果”语句引用的问题。这里如何区分移动引用和固定引用


谢谢。

您可以使用self.client\u mobile和self.client\u fixed向后跟随外键。使用这些名称是因为在外键中设置了相关的名称。有关更多信息,请参阅文档:

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

谢谢,这很有帮助。我只是看看客户同时拥有移动和固定产品的情况。看起来引用现在将引用满足条件的第一个“if”。请问有没有更好的方法让客户更具辨别力?是的,如果客户同时拥有移动和固定产品,上面的示例将使用mobile_list_by_client。我不知道你说的“更挑剔”是什么意思。get_absolute_url方法只能返回一个url,因此,如果客户端同时具有这两个url,则由您决定返回什么。谢谢,现在我可以了解如何更改应用程序和模型以利用这一点-可能最好拥有一个包含移动和固定线路所有权的客户端应用程序。