2016-07-07 24 views
1

私はdjango-adminに問題があります。私は3つのオブジェクトがあります。Djangoは親のフィールドを子の中に編集します

  • 説明
  • 仕事
  • プロジェクト

をそして私は仕事やプロジェクト内に直接説明を編集したいです。ここで

は私model.py次のとおりです。だから、

class Description(models.Model): 
    short_desc = models.TextField() 
    long_desc = models.TextField() 


class Job(models.Model): 
    location = models.TextField() 
    desc = models.ForeignKey(Description) 


class Project(models.Model): 
    name = models.TextField() 
    desc = models.ForeignKey(Description) 

、概念的には、DescriptionJobProjectの親です。

そして、私のadmin.py

class DescriptionInLine(admin.StackedInline): 
    model = Description 


@admin.register(Project) 
class ProjectAdmin(admin.ModelAdmin): 
    model = Project 
    inlines = [DescriptionInLine] 


@admin.register(Job) 
class JobAdmin(admin.ModelAdmin): 
    model = Job 
    inlines = [DescriptionInLine] 

私は、Djangoのサーバを実行するたびに、私は次のエラーを取得する:

<class 'admin.DescriptionInLine'>: (admin.E202) 'Description' has no ForeignKey to 'Job'. 

私はエラーを取得する理由を私は理解して:Djangoは関係がであることを期待反対に。

また、ForeignKeyOneToOneFieldに置き換えようとしましたが、成功することはありませんでした。

これを解決する方法はありますか?

答えて

1

インラインは他の方向に使用することを意図しているため、このエラーが発生します(this questionを参照)。魔法のように

class Description(models.Model) 

    class Meta: 
     abstract = True 
     # Abstract is optional but I think for your usecase, 
     # standalone `Description` does not make any sense. 
     # If not `abstract`, a one-to-one relation will be implied 
     # between parent and children 

    short_desc = models.TextField() 
    long_desc = models.TextField() 

class Job(Description): 
    location = models.TextField() 

class Project(Description): 
    name = models.TextField() 
+0

作品:

私はあなたのユースケースのために、あなたがより良いmodel inheritanceを使用したいと思います。モデルを変更する人に注意してください: 'makemigrations'と' migrate'を忘れないでください。 :) – maddersky

関連する問題