【问题标题】:lack of foreign key in admin model?管理模型中缺少外键?
【发布时间】:2019-06-21 13:32:00
【问题描述】:

尝试更新我的数据库时出现以下错误:

class 'artdb.admin.RoleInline': (admin.E202) 'artdb.Role' 没有 ForeignKey 到 'artdb.Person'

我希望 Person 和 Role 之间没有多对多关系

model.py(未显示所有类):

class Person(models.Model):

    mail=models.EmailField()
    firstName=models.CharField(max_length=200)
    lastName=models.CharField(max_length=200)
    phoneNumber=PhoneNumberField()
    streetAdress=models.CharField(max_length=200)
    zipcode=models.CharField(max_length=200)
    city=models.CharField(max_length=200,default="Göteborg")
    country=models.CharField(max_length=200,default="Sweden")

    def __str__(self):
        return "%s %s" % (self.firstName,self.lastName)

    class Meta:
        ordering = ('firstName','lastName')

class Role(models.Model):

    role=models.CharField(max_length=200)
    person=models.ManyToManyField(Person)

    def __str__(self):
        return self.role

    class Meta:
        ordering = ('role',)

admin.py(不显示所有类):

from django.contrib import admin
from .models import Role
from .models import Address
from .models import Date
from .models import Person
from .models import Name

# Register your models here.

admin.site.register(Role)
admin.site.register(Address)
admin.site.register(Date)
admin.site.register(Name)
admin.site.register(Person)

class RoleInline(admin.TabularInline):

    model=Role
    extra=3


class PersonInline(admin.ModelAdmin):

    fieldsets=[
        (None,{'fields': ['mail','firstName','lastName','phoneNumber','streetAdress','zipcode','city','country']}),
    ]
    inlines = [RoleInline]
    search_fields = ['firstName']

#admin.site.register(Name,NameInline)
admin.site.register(Person,PersonInline)

它以前曾与 run manage.py makemigrations artdb 一起工作过 我没有看到模型中的错误。

【问题讨论】:

    标签: django foreign-keys relation


    【解决方案1】:

    根据ManytoMany relationship in TabularInline 的文档,您的RoleInline 模型错误

     model = Role.persons.through
    

    【讨论】:

    • 我改成 model = Role.person.through 因为人,而不是人,是一个属性,但是另一个问题出现了:populate() 不是可重入的
    • 好的,我可能已经解决了,需要在 ipython 之外进行所有迁移并删除 admin.site.register(Person,PersonInline),不确定这是否正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 2016-05-05
    相关资源
    最近更新 更多