我有一个这样的基础模型:
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是否相同可以吗?
答案 0 :(得分:2)
在抽象类中,您不应对相关名称进行硬编码,而是执行以下操作:
class Base(models.Model):
...
field= models.ForeignKey(
OtherModel,
related_name="%(app_label)s_%(class)s_related",
)
请参阅docs。