Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何保存多个型号的旧ID/参考号?_Django_Django Models_Foreign Keys - Fatal编程技术网

Django 如何保存多个型号的旧ID/参考号?

Django 如何保存多个型号的旧ID/参考号?,django,django-models,foreign-keys,Django,Django Models,Foreign Keys,保存多个型号的旧ID/参考号的最佳概念方法是什么 例如: class Project(models.Model): reference_number = models.CharField(_('Project ID'), max_length=16, unique=True) class Offer(models.Model): reference_number = models.CharField(_('Offer ID'), max_length=1

保存多个型号的旧ID/参考号的最佳概念方法是什么

例如:

 class Project(models.Model):
     reference_number = models.CharField(_('Project ID'), max_length=16,
        unique=True)

 class Offer(models.Model):
     reference_number = models.CharField(_('Offer ID'), max_length=16,
        unique=True)
我的想法:

  • 每个模型都有一个单独的模型

    class OldProjectNumber(models.Model):
        project = models.ForeignKey(Project)
        old_number = models.CharField(_('Old ID'), max_length=16,
            unique=True)
    
    ...
    
  • 所有模型都是一个模型

    class OldNumber(models.Model):
        project = models.ForeignKey(Project)
        offer = models.ForeignKey(Offer)
        old_number = models.CharField(_('Old ID'), max_length=16,
            unique=True)
    
  • 还有别的吗

  • 也许a可以将这些值保存在模型本身中

    我需要能够搜索/过滤每个型号的旧参考号


    任何建议都将不胜感激。

    这取决于有多少旧参考资料

    如果只有几个旧的参考号,您可以使用
    CommaSeparatedCharField
    ,但在此情况下,您必须指定最大长度,该长度将限制为几个参考号,并在将来任何时候导致问题

    我建议您使用textfield和json格式的字符串来存储旧引用列表

    如果参考编号的计数可能变大,则应为所有模型使用一个模型来存储参考编号

    此外,您应该使用通用外键,该外键将映射到所有其他模型,而不是为每个模型使用外键

    from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
    from django.contrib.contenttypes.models import ContentType
    
    class OldNumber(models.Model):
        content_type = models.ForeignKey(ContentType)
        object_id = models.PositiveIntegerField()
        content_object = GenericForeignKey('content_type', 'object_id')
    
    以及模型本身的泛型关系

    old_reference = GenericRelation('OldNumber', related_query_name='model_name')  # related_query_name for reverse querying
    

    第二个模型看起来不错,如果你已经有了现有的数据库。如果它们是唯一的,则可以使用One2One关系如果您确定旧参照只有2个模型,则可以使用2个外键,但不能缩放。如果您想要为许多模型提供参考,那么一定要使用通用外键