在admin中重新呈现模型,该模型访问m2m字段和外键字段

时间:2017-08-09 15:56:59

标签: python django django-models django-admin

我有一个名为Statement的模型,它有一个名为“keyword_pairs”的字段,用另一个名为KeywordInContext的模型创建。

KeywordInContext有两个字段:“关键字”和“上下文”。 “keyword”使用名为Keyword的模型实例开发外键。 “context”与模型Keyword形成m2m关系。这是创建配对系统,以便每个关键字都有一组可以配对的关键字。

但是,Statement的管理员更改页面呈现KeywordInContext模型的方式只是m2m关系的默认下拉框。此下拉框允许您选择KeywordInContext模型的“关键字”字段,但不允许任何修改或添加“上下文”。有人可以简单地更新/添加一个语句,并隐含地说“这个Statement有一堆KeywordInContext个对象,其”关键字“字段设置为我从此下拉菜单中选择的内容。”但他们实际上要添加他们想要为关键字指定的上下文,他们必须转到KeywordInContext的更改页面。

这会禁止成对提交“关键字”和“上下文”以添加到管理员端的“keyword_pairs”。我该怎么做才能改变这个? 这是models.py

的代码
@python_2_unicode_compatible
class Statement(models.Model):
    statement_id = models.CharField(max_length=200)
    title = models.CharField(max_length=200)
    issue_date = models.DateField("Issue-Date")
    author = models.ForeignKey(Person)
    released_by = models.ForeignKey(Organization)
    keywords = models.ManyToManyField('KeywordInContext')

 @python_2_unicode_compatible
 class KeywordInContext(models.Model):
     keyword = models.ForeignKey(Keyword)
     contexts = models.ManyToManyField(Keyword, related_name='keyword_context')
    def __str__(self):
        return self.keyword.word + ' (' + ', '.join(c.word for c in self.contexts.all()) + ')' #We temporarily changed the __str__ method to show all of the contexts for a keyword.

1 个答案:

答案 0 :(得分:0)

除非我误解了这个问题,否则听起来像是你所追求的内容。文档有一个非常明确的例子:

https://docs.djangoproject.com/en/1.11/ref/contrib/admin/#inlinemodeladmin-objects