从另一个与OneToOneField或ForeignKey关系

时间:2017-08-20 21:32:18

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

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

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'没有ForeignKey到'common.Admin'。”

1 个答案:

答案 0 :(得分:0)

使用此设置:

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的名称字段:

<强>乙

'fk__name'

<强> C

'oto__name'