Django 如何保存多个型号的旧ID/参考号?
保存多个型号的旧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
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)
任何建议都将不胜感激。这取决于有多少旧参考资料 如果只有几个旧的参考号,您可以使用
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个外键,但不能缩放。如果您想要为许多模型提供参考,那么一定要使用通用外键