0
class Data(models.Model):
    user = models.ForeignKey(User, unique=True)
    name = models.CharField(null=False, max_length=250)


class OtherData(models.Model):
    user = models.ForeignKey(User, unique=True)
    something = models.CharField(max_length=250)

如何在 Django Admin 中创建类似堆栈内联但没有外键的东西?如果我Data在管理页面中查看对象,我还想查看OtherData对象(属于同一用户)

4

1 回答 1

0

如果要在同一个表单上管理 Data 和 OtherData,那么:

  1. 在管理员中使用用户模型和
  2. 在 Data 和 OtherData 上添加两个堆栈内联。
  3. 排除用户的所有文件或将用户名设置为 read_only 以供参考
  4. 您可能必须取消注册 User 模型并再次注册,因为据我所知,它只能注册一次。

这是一个示例代码

from django.contrib.admin import StackedInline
from django.contrib.auth.models import User
from models import Data, OtherData

class DataInline(StackedInline):
    model = Data
    #form = you can customize your form
    #max_number = define the number of inlines

class OtherDataInline(StackedInline):
    model = OtherData

class UserAdmin(admin.ModelAdmin):
    inlines = (DataInline, OtherDataInline,)
    fields = ('username',)
    readonly_fields = ('username',)

#the user can be regitered just once in the admin
admin.site.unregister(User)
admin.site.register(User, UserAdmin)

如果用户有多个 Data 或 OtherData,您可能想尝试 TabularInline。换句话说,如果您在模型中有一对多关系。Inlines 的灵活性令人难以置信。

于 2013-01-25T13:56:28.920 回答