基础模型对象的相关名称

时间:2016-06-01 23:50:30

标签: django

我有一个这样的基础模型:

class DeliverableFileAttachment(FileAttachment):
    deliverable = models.ForeignKey(Deliverable, related_name='files')

class TaskItemFileAttachment(FileAttachment):
    taskitem = models.ForeignKey(TaskItem, related_name='files')

我在两个不同的模型上继承它,对于两个不同的地方你可以附加这样的文件:

class DeliverableFileAttachment(FileAttachment):
    deliverable = models.ForeignKey(Deliverable, related_name='files')

class TaskItemFileAttachment(FileAttachment):
    taskitem = models.ForeignKey(TaskItem, related_name='files')

对于作者的外键,是否可以将两个不同的模型具有相同的相关名称?还有更好的方法吗?

编辑:

相反的情况如何:

class FileAttachment(models.Model):
    author = models.ForeignKey(Account, related_name='files', default=None)
    attached_file = models.FileField(upload_to=generate_image_upload_path, default=None)

    limit = models.Q(app_label='workflow', model='project') | \
        models.Q(app_label='workflow', model='taskitem') | \
        models.Q(app_label='workflow', model='deliverable')
    content_type = models.ForeignKey(
        ContentType,
        verbose_name=_('File Attachment'),
        limit_choices_to=limit,
        null=True,
        blank=True,
        related_name='files'
    )
    object_id = models.PositiveIntegerField(
        verbose_name=_('related object'),
        null=True,
    )   
    content_object = GenericForeignKey('content_type', 'object_id')

相关名称是否可以相同,因为它们指向不同的模型?

或者说我有这样一个对象:

UInt8

作者的related_name和content_type是否相同可以吗?

1 个答案:

答案 0 :(得分:2)

在抽象类中,您不应对相关名称进行硬编码,而是执行以下操作:

class Base(models.Model):
    ...
    field= models.ForeignKey(
        OtherModel,
        related_name="%(app_label)s_%(class)s_related",
    )

请参阅docs