我对如何在 Django 中建立关系模型以便可以在 Django 管理中内联编辑感到困惑。
让我解释一下场景。
我有一个客户模型和一个地址模型。在客户模型中,我与地址有一个 OneToOneField 关系,一次用于计费,一次用于送货地址。
class Address(models.Model):
pass
class Employee(models.Model):
billing_address = models.OneToOneField(Address)
shipping_address = models.OneToOneField(Address)
# Many more such fields
现在有了这个模型,没有简单的方法让它们在管理中内联。我尝试了以下方法
class AddressInline(admin.TabularInline):
model = Address
class Customer(admin.ModelAdmin):
inlines = [AddressInline, ]
我一直收到错误,
<class 'employee.admin.AddressInline'>: (admin.E202) 'employee.Address' has no ForeignKey to 'employee.Customer'.
现在我知道还有其他类似的错误。 IE。 Use OneToOneField inlined in Django Admin和 Django admin - OneToOneField inline throws "has no ForeignKey" exception
但我认为我的问题与这篇文章略有不同。请帮忙!
最佳答案
#1
模型.py
class BillingAddress(models.Model):
employee = models.OneToOneField(to=Employee, related_name='billing_address')
class Employee(models.Model):
# Many more such fields
admin.py
class AddressInline(admin.TabularInline):
model = BillingAddress
extra = 1
@admin.register(Employee)
class EmployeeAdmin(admin.ModelAdmin):
inlines = [AddressInline, ]
#2
模型.py
class Address(models.Model):
name = models.CharField(max_length=250)
employee = models.ForeignKey(to=Employee, related_name='addresses')
class Employee(models.Model):
# Many more such fields
admin.py
class AddressInline(admin.TabularInline):
model = Address
@admin.register(Employee)
class EmployeeAdmin(admin.ModelAdmin):
inlines = [AddressInline, ]
完整示例:
模型.py
class Company(models.Model):
pass
class CompanyScheduler(models.Model):
company = models.OneToOneField(
to=Company,
related_name='scheduling',
on_delete=models.CASCADE,
)
start = models.DateField()
finish = models.DateField()
管理员.py
class CompanySchedulerInLine(admin.TabularInline):
model = CompanySchedulerInLine
extra = 1
@admin.register(CompanyModelAdmin)
class CompanyModelAdmin(admin.ModelAdmin):
inlines = [
SchedulerInLine,
]
界面
关于Django OneToOneField 和管理 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27291728/