如何在Django Admin中创建类似堆叠内联但不使用外键的功能?
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的管理后台创建类似于堆叠内联的功能,但不使用外键?如果我在管理页面查看Data
对象,我希望能看到同一个用户的OtherData
对象。
1 个回答
0
如果你想在同一个表单上管理 Data 和 OtherData,步骤如下:
- 在后台使用用户模型(User model);
- 在 Data 和 OtherData 上添加两个堆叠内联(stack inlines);
- 排除用户的所有文件,或者只把用户名设置为只读,以便参考;
- 你可能需要先注销用户模型,然后再重新注册,因为据我所知,它只能注册一次。
这里有一段示例代码:
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)。换句话说,如果你的模型中有一对多的关系,使用内联的灵活性非常棒。