从多个模型中保存旧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)
还有别的吗?
可能需要CommaSeparatedCharField来保留模型本身的值吗?
我需要能够搜索/过滤每个模型的旧参考编号。
任何建议都表示赞赏。
答案 0 :(得分:0)
这取决于将有多少旧参考。
如果只有几个旧的参考号,你可以使用CommaSeparatedCharField
,但在此你必须指定max_length,这将把它限制为很少的参考号,并在将来的任何时候引起问题。
我建议您使用文本字段并使用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