通过Django管理工具建立一对一的关系

bybem2ql  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(93)

我正在更新一个系统,并借此机会修改了一些东西,但希望保留旧的用户表中的一些字段。我已经在新项目中建立了一个概要文件,并希望通过一对一的关系将它链接到遗留用户表,主要是为了利用链接到旧uid的内容。
我在models.py中有以下内容:

class Profile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    first_name = models.CharField(max_length=20, help_text='Enter your first name.', blank=False)
    last_name = models.CharField(max_length=20, help_text='Enter your last name.', blank=False)

class LegacyUser(models.Model):
    legacy_id = models.CharField(max_length=10, null=False)
    legacy_email = models.CharField(max_length=50, blank=True, null=True)
    legacy_current_user = models.OneToOneField(Profile, null=True, on_delete=models.PROTECT)

字符串
admin.py中,我有:

from django.contrib import admin
from .models import Profile, LegacyUser

# Register your models here.


class LegacyAdmin(admin.StackedInline):
    model = LegacyUser

@admin.register(Profile)
class ProfileAdmin(admin.ModelAdmin):
    list_display = ['user', 'first_name','last_name']
    raw_id_fields = ['user']
    inlines = [ LegacyAdmin ]


现在,我可以在管理工具中看到遗留表,但看不出新旧表之间的关系。在理想的情况下,我希望能够放入一个遗留的uid,让它填充子表单其余部分的字段(用于健全性检查),并能够保存链接的配置文件。这可能吗?

ibps3vxo

ibps3vxo1#

看看你的管理员,因为你唯一注册的是Profile,那么你试图添加或编辑Profile,并看到可能的LegacyAdmin的下拉列表,这似乎是你在这里的用例。
如果你正在编辑Profile,那么我相信唯一的方法是在Profile上声明OneToOneField,而不是LegacyUser。然后,您可以在Profile添加/编辑管理页面中获得一个下拉列表,该列表将允许您选择并保存与Profile相关的LegacyUser。通过自定义LegacyUser__str__()方法,您还可以在该下拉列表中显示所需的字段以进行健全性检查。

相关问题