【问题标题】:add fields to model from another one related with OneToOneField or ForeignKey relation从与 OneToOneField 或 ForeignKey 关系相关的另一个字段向模型添加字段
【发布时间】:2018-01-28 22:20:21
【问题描述】:

我是 django 新手,我使用的是 1.11 版本
我有几个模型,一些与外键相关,一些与 oneToOne 关系。
例如用户和个人资料模型,我想从用户表单中添加个人资料表单字段
怎么样?
对于 oneToOne,我有一个管理模型,其中包含与用户模型相关的 oneToOne 字段。但不仅仅是管理员,我有几种类型的用户(管理员,作家,commetator,...),每一种都在不同的模型中,当创建一种类型时,我还创建了它的相关用户,所以当我在管理员中访问作家表单时,我创建管理员,但我也想拥有用户的模型字段,以便我从作者的表单中创建两者
在 AdminAdmin 即:我想在管理模板中显示的表单中添加用户字段的管理模型

from django.contrib import admin

from .models import User, Admin


class UserInline(admin.StackedInline):
    model = User
    fields = ['username', 'first_name', 'last_name']

class AdminAdmin(admin.ModelAdmin):
    model = Admin
    list_display = ['getUsername']
    inlines = [UserInline]

    def getUsername(self, obj):
        return obj.user.username

    getUsername.short_description = "Nom d'utilisateur"

admin.site.register(Admin, AdminAdmin)

此代码生成错误“: (admin.E202) 'common.User' has no ForeignKey to 'common.Admin'。”

【问题讨论】:

    标签: django django-models django-forms foreign-keys one-to-one


    【解决方案1】:

    使用此设置:

    Class A(models.Model):
        # ...
        nameField = models.CharField(max_length=100, ...)
        # ...
        pass
    
    Class B(models.Model)
        # ...
        fk = models.ForeignKey(A)
        # ...
    
    Class C(models.Model):
        # ...
        oto = models.OneToOneKeyField(A)
    

    您无法使用ForeignKey + __ + FieldName 访问相关模型的字段。例如。您可以通过以下方式从相关模型中访问模型 A 的名称字段:

    B

    'fk__name'

    C

    'oto__name'

    【讨论】:

    • 感谢您的回答,但它不起作用我收到错误“为个人资料指定的未知字段(用户__用户名)。检查类 ProfileAdmin 的字段/字段集/排除属性。”
    • 更多信息可能会对您有所帮助。 1)你把那个代码放在哪里了? 2)你在哪里需要相关领域? (管理员或您自己的视图)。 3)您需要哪些相关模型? (models.Model, admin.ModelAdmin, forms.ModelForm?)
    • 请查看帖子
    • 那么我建议为您需要的每个外键实现一个管理内联。看看django documentation
    • 我看到并尝试了它,但它确实对我有用,按照那个例子,我想为 BookAdmin 提供一个 AuthorInline
    猜你喜欢
    • 2019-09-10
    • 2015-08-01
    • 2018-12-09
    • 1970-01-01
    • 2015-12-23
    • 2021-09-10
    • 1970-01-01
    • 2022-10-16
    • 2014-09-04
    相关资源
    最近更新 更多