如何在 Django Admin 中格式化 OneToOne 关系?

How to format OneToOne Relationship in Django Admin?

我有 2 个模型,它们通过 OneToOneField 关系连接。这是他们的样子:

class UserText(models.Model):
    user_input = models.CharField(max_length=2000)

class Question(models.Model):
    user_text = models.OneToOneField(
        UserText,
        on_delete=models.CASCADE,
        blank=True,
        null=True,
    )
    user_questions = models.CharField(max_length=2000)

我希望每个 UserText 都在数据库中连接到它的问题模型。这就是我使用 OneToOne 关系的原因。从这里开始,我不知道如何在我的 admin.py 中表示这种关系,因此当我通过管理员查看我的数据库时,我会看到每个 UserText 模型及其连接的问题。这是我 admin.py 目前的样子:

from django.contrib import admin
from v2.models import UserText
from v2.models import Question

@admin.register(UserText)
class UserTextAdmin(admin.ModelAdmin):
    model = UserText
    display = ('user_input')

@admin.register(Question)
class QuestionAdmin(admin.ModelAdmin):
    model = Question
    display = ('user_questions')

我需要在我的 admin.py 中添加或更改什么,以便每个问题模型都通过 OneToOne 关系连接到它的父 UserText 模型?

您只需要调用正确的相关字段即可。

如果您在问题管理界面中,您需要将 user_text 添加到您的表单中:

@admin.register(Question)
class QuestionAdmin(admin.ModelAdmin):
    ...
    fields = ('user_text', ...)

如果您在 UserText 管理界面中,您可以使用 inlines:

class QuestionInline(admin.TabularInline):
    model = Question

@admin.register(UserText)
class UserTextAdmin(admin.ModelAdmin):
    ...
    inlines = [QuestionInline, ]

顺便说一句,OneToOneField 类似于 ForeignKeyunique=True,换句话说,每个用户只能有一个问题。如果用户有多个问题,你应该切换到 ForeignKey.