我有一个型号,我有另一个型号的外键,在那个型号中我有company_name个,我正在寻找一种方法来创建带有一些字母的Customer_id,然后将公司名称添加到该ID中 它应该如下所示:

123456GOOGLE

OR

123456AMAZON

我试着用信号,但那不是我需要的,那我该怎么解决呢?

Models.py

class CompanyUserPhysicalCard(models.Model):
    card = models.ForeignKey(Cards, on_delete=models.CASCADE, related_name='company_physical_user_cards')
    company = models.ForeignKey(Company, on_delete=models.SET_NULL, null=True, verbose_name='компания')
    custom_id = models.CharField(max_length=7, unique=True, default=company_card_code, editable=False, null=True,
                                 blank=True)

对于那个函数,我得到了一个错误

 'ForeignKey' object has no attribute 'company_name'

def company_card_code(company):
    letters = '01234567890QLUBOK'
    result_str = ''.join(random.choice(letters) for i in range(9)) + str(company.company_name)

    return result_str

推荐答案

我建议按需计算名称,如下所示:

from random import choices


class CompanyUserPhysicalCard(models.Model):
    def company_card_code(self):
        letters = '01234567890QLUBOK'
        return ''.join(choices(letters, k=6))

    card = models.ForeignKey(
        Cards,
        on_delete=models.CASCADE,
        related_name='company_physical_user_cards',
    )
    company = models.ForeignKey(
        Company, on_delete=models.SET_NULL, null=True, verbose_name='компания'
    )
    _custom_id = models.CharField(
        max_length=6, default=company_card_code, editable=False, blank=True
    )

    @property
    def custom_id(self):
        return f'{self._custom_id}{self.company.company_name}'

因此,我们生成代码前缀,当我们需要它时,我们会附加公司名称.

如果该公司后来在不更改表格的情况下将其名称(例如,'Facebook'更改为'Meta'),它也将更改custom_id.

您可以通过连接Concat [Django-doc]进行筛选,例如:

from django.db.models.functions import Concat

CompanyUserPhysicalCard.objects.alias(
    custom_id=Concat('_custom_id', 'company__company_name')
).filter(custom_id='123456GOOGLE')

Django相关问答推荐

以特定顺序获取模型实例时出现问题

在Django的个人页面中的问题

Django 中模型将数据存储在哪里?

在 Django 中重组多对多字段

Django:使用相同的外键在不同的应用程序中 Select 多个列

Django PositiveIntegerField 中的 0 值?

JSP模板继承

Django中的左外反向select_related?

Django populate() 不可重入

django 表单为关键字参数获取了多个值

Django - 来自 QuerySet 的唯一列表

django post_save 更新信号

如何使用查询参数构造 Django 反向/url?

get_or_create() 是否必须立即保存?

Django 自定义用户邮箱帐户验证

AWS Cognito 作为网站的 Django 身份验证后端

django.db.utils.OperationalError 无法连接到服务器

django.urls.path中name参数的作用是什么?

如何获取 Django 模型字段对象的值

何时使用 Django get_absolute_url() 方法?