簡體   English   中英

Django - 管理站點中 OneToOne 字段的內聯表單

[英]Django - Inline form for OneToOne field in admin site

嗨 這個問題已經被問過很多次了,但不幸的是我找不到一個真正有效的答案。 以下是我的模型:

class Person(models.Model):
    name = models.CharField(max_length=100)
    ...

class Address(models.Model):
    person = models.OneToOneField(Person)
    ...

然后在管理員中我有:

class AddressInline(admin.StackedInline):
    model = Address


class PersonAdmin(admin.ModelAdmin):
    inlines = (AddressInline)

admin.site.register(Person, PersonAdmin)

然后我得到了這個臭名昭著的錯誤:

<class 'address.models.Address'> has no ForeignKey to <class 'person.models.Person'>

我試過了:

  • Django 反向管理。 不幸的是沒有與 Django 1.6 一起工作,我不夠聰明,無法讓它與 1.6 一起工作
  • stackover 流程​​中關於使用代理模型和抽象基類的一些建議也沒有奏效。

如果有人能幫我找到解決方法,我將不勝感激。

我還沒有嘗試過,但這個要點似乎基於 django-reverse-admin 中的代碼,但已更新為適用於 Django 1.6:

https://gist.github.com/mzbyszewska/8b6afc312b024832aa85

請注意,示例代碼的這一部分是錯誤的:

class AddressForm(models.Form):
    pass

...您需要from django import forms頂部的from django import forms ,然后執行以下操作:

class AddressForm(forms.ModelForm):
    class Meta:
        model = Address

此處第 46 行的示例代碼中還有另一個問題:

inline_reverse = ('business_addr', ('home_addr', AddressForm), ('other_addr' (
    'form': OtherForm
    'exclude': ()
)))

應該是:

inline_reverse = ('business_addr', ('home_addr', AddressForm), ('other_addr', {
    'form': OtherForm,
    'exclude': ()
}))

請注意,它向您展示了指定內聯的三種不同方式...第一種只是通過字段名稱'business_addr'即如果您不需要內聯模型的自定義表單。

我已經安裝:

  • 姜戈==1.6.5
  • MySQL-python==1.2.4
  • 南==0.8.1

下面的代碼適用於我:

模型.py

# -*- coding: utf-8 -*-

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=100)


class Address(models.Model):
    person = models.OneToOneField(Person)
    street = models.CharField(max_length=100)

管理文件

# -*- coding: utf-8 -*-
from django.contrib import admin

from .models import *


class AddressInline(admin.StackedInline):
    model = Address


class PersonAdmin(admin.ModelAdmin):
    inlines = (AddressInline,)

admin.site.register(Person, PersonAdmin)
admin.site.register(Address)

這是管理界面:

管理界面

對於那些尋找 Django 2.0 解決方案的人:你可以使用這個庫: https : //pypi.org/project/django-reverse-admin/

它對我來說效果很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM