Django相关模型未更新管理中的相关对象

Rya*_*yan 7 python django django-models django-admin

我有两个看起来像这样的模型:

模型.py

class Client(models.Model):
    deal = models.ManyToManyField('Deal', related_name="clients")

class Deal(models.Model):
    client = models.ManyToManyField(Client, related_name="deals")
Run Code Online (Sandbox Code Playgroud)

然后在管理员中,我内联了相关模型,以便无论您打开的对象类型如何,都可以轻松进行更改。

管理文件

class ClientInline(admin.TabularInline):
    model = Deal.client.through

class DealAdmin(admin.ModelAdmin):
    inlines = [ClientInline]

class DealInline(admin.TabularInline):
    model = Client.deal.through

class ClientAdmin(admin.ModelAdmin):
    inlines = [DealInline]
Run Code Online (Sandbox Code Playgroud)

但是,如果您在 aClient中添加 aDeal然后打开Client详情页面,则不会出现相应的交易。有什么我没有连接的吗?

Joh*_*rry 0

我刚刚对此进行了测试,您实际上非常接近。

首先@wowkin2说,您不想ManyToManyField在两个模型中定义 a,所以我可能只是在您的Deal模型中定义它。

其次,替换它:

class DealInline(admin.TabularInline):
    model = Client.deal.through 
Run Code Online (Sandbox Code Playgroud)

有了这个:

class DealInline(admin.TabularInline):
    model = Deal.client.through
Run Code Online (Sandbox Code Playgroud)

一切都应该有效。


所以,你的文件现在应该是这样的:

模型.py

class Deal(models.Model):
    client = models.ManyToManyField(Client, related_name="deals")
Run Code Online (Sandbox Code Playgroud)

管理员.py

class ClientInline(admin.TabularInline):
    model = Deal.client.through

class DealAdmin(admin.ModelAdmin):
    inlines = [ClientInline]

class DealInline(admin.TabularInline):
    model = Deal.client.through

class ClientAdmin(admin.ModelAdmin):
    inlines = [DealInline]
Run Code Online (Sandbox Code Playgroud)