我在models.py上有一个有self 关系的模型:

from uuid import uuid4 from django.db 
import models 


class Example(models.Model): 
    uid = models.UUIDField(primary_key=True, default=uuid4) 
    title = models.CharField(max_length=128) 
    parent = models.ForeignKey("self", related_name="subexamples", blank=True, null=True) 

和Django管理模型:

from .models import Example 
from django.contrib import admin 


class ExampleInline(admin.TabularInline): 
    model = Example 
    exclude = ("uid",) 
    extra = 1 
    verbose_name = "Subexample" 
    show_change_link = True 


class ExampleAdmin(admin.ModelAdmin): 
    search_fields = ("title", ) 
    exclude = ("uid",) 
    inlines = [ExampleInline,] 

admin.site.register(Example, ExampleAdmin)

在管理网站上,我可以看到主模型并与任何其他情况一样内联.添加第一个Inline对象后问题开始.添加后,我无法再删除或更改它.我看到的唯一错误是"请更正下面的错误."下面没有任何问题.Django日志(log)中也没有任何问题. 我正在使用Django==5.0.2

在阅读了类似的问题后,我发现定制PK打破了逻辑,但实际上没有找到任何解决这个问题的解决方案.

推荐答案

Django的内联表单似乎无法很好地处理exclude来处理primary keys.我设法复制了这种行为.

But,好消息是,我们可以通过将主密钥标记为editable=False [Django-doc]来解决这个问题,这实际上意味着这些字段在ModelForm中不可编辑,或者至少在没有显式添加它的情况下不可编辑.这对于作为主密钥的UUIDField来说是有意义的,因为您让系统定义UID,而不是用户:这也是(我认为)您 Select exclude = ('uid',)的原因.由于某种原因,这并不太好用,但我们可以在模型层中这样做:

class Example(models.Model):
    uid = models.UUIDField(primary_key=True, default=uuid4, editable=False)
    title = models.CharField(max_length=128)
    parent = models.ForeignKey(
        'self', related_name='subexamples', blank=True, null=True
    )

Update:我添加了ticket [Django-ticket]并创建了一个打开的pull request [GitHub]来解决这个问题.

Django相关问答推荐

其中实际的数据库提取在DRF list()中完成

我如何告诉Django如何恢复自定义迁移?

Django allauth 社交帐户注册中邮箱的模板变量

有没有办法在Django中按需/点击仅获取和序列化一部分数据以提高性能?

Django prefetch_related 与 3 个不直接相关的模型

如何在 Fargate 容器中运行的 Django 中使用 AWS SES?

如何将 select_related 应用于 Django 中的 m2m 关系的对象?

在 django HTML 邮箱模板中使用字体

Django:在模板中呈现表单字段时添加 CSS 类

Django 模板上的 URL 编码

根据模型属性获取django对象id

更新Django模型对象多个字段的有效方法

在 Django 中使用 AuthenticationForm

Python:获取异常的错误消息

django:TypeError:'tuple'对象不可调用

如何在字段集中显示 Django 管理内联模型?

javascript 文件中的 Django {% static 'path' %}

Django 1.7 - 如何 suppress (1_6.W001)某些元素单元测试可能无法按预期执行.?

在 Django 开发服务器中关闭静态文件的缓存

Django:DoesNotExist从何而来?