2016-06-01 7 views
0

に私はこのようなベースモデルを持っています外部キーを作成するには、2つの異なるモデルが同じ名前のアカウントを持つことは大丈夫ですか?これを行うにはよりよい方法がありますか?関連の名前はベースモデルオブジェクト

EDIT:

逆の状況について何を:彼らは別のモデルを指しているので

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') 

はそれがオーサリングするrelated_nameとCONTENT_TYPEが同じであること大丈夫ですか?あなたがrelated_nameをハードコードが、このような何かをしてはならない抽象クラスで

+0

これは達成しようとしていることに非常に依存します – e4c5

+0

2つのモデルにアップロードを追加できるようにするには複数のアップロード。 – shenk

+0

申し訳ありませんが、その声明は私にはあまり明確ではありません – e4c5

答えて

2

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

docsを参照してください。

+0

それは私がやったことです。私は、特定の著者に関連するすべての "添付"型のモデルのリストを想像していましたが、異なるオブジェクトに対して同じrelated_nameの2つではうまく動作しないことに気付きました。私はちょうどその混合リストを自分で構築しなければならないだろう。 – shenk

+0

それ以外の場合、私のChildAとChilBはどちらも同じ名前ですが、2つの異なるモデルを指しています。私の編集のように。それは働くだろうか? – shenk

+0

はい、問題ありません。結果のマネージャはモデルに追加されます:DeliverableFileAttachment.filesとTaskItemFileAttachment.filesは明確に区別可能です。 –

関連する問題