我有一个OneToOneField和我的User和UserProfile模型。还有第二个模型交易。创建事务时,它将使用foreignKey User对象。
我想要的是使用OneToOneField UserProfile来显示与该用户相关的事务对象。使用str表示事务对象。
所以它看起来像这样:
另一个例子是,假设我的数据库是
userid_id transaction_id
2 1
2 2
4 3
4 4
然后每当我从管理面板查看用户2时,我只会看到事务1和2.
我不太清楚如何显示onetomany关系或一般指定在管理面板中显示哪些对象。
class transaction(models.Model):
amount = models.IntegerField()
investment_point = models.ForeignKey(investment_point, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
ip = models.IntegerField(default=0)
ingameName = models.CharField(max_length=50, default='NotSet')
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
post_save.connect(create_user_profile, sender=User)
在我的管理面板中
class UserProfileInline(admin.StackedInline):
model = UserProfile
can_delete = False
verbose_name_plural = 'profile'
class UserAdmin(UserAdmin):
inlines = (UserProfileInline, )
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
答案 0 :(得分:3)
默认情况下,Django Admin不支持嵌套内联(据我所知,你需要嵌套的内联)。但是,有几种解决方法。
使用第三方软件包
您可以在GitHub包页面上使用Django-super-inlines包,安装程序和示例。
此外,还有django-nested-admin来帮助您。
为同一模型使用两个admin
类并将其链接
我们可以定义从UserProfile
到Transaction
的链接,而不是使用第三方软件包嵌套内联。
要实现这一目标,您需要制作两个admin
类UserProfile
模型,以扩展基础ModelAdmin
和TabularInline
,并编写一个简单的自定义方法:< / p>
from django.core.urlresolvers import reverse
# Main admin model
class UserProfileAdmin(admin.ModelAdmin):
inlines = [TransactionInline, ]
# Register it as admin
admin.site.register(UserProfile, UserProfileAdmin)
# This will show a reference
class UserProfileReferenceInline(admin.TabularInline):
model = UserProfile
can_delete = False
verbose_name_plural = 'profile'
readonly_fields = ('reference_link', )
def reference_link(self, instance):
if instance.id:
# Change 'yourapp' with your app name
reference_url = reverse(
'admin:yourapp_transaction_change', args=(instance.id,)
)
return '<a href="%s" target="_blank">Transaction</a>' % reference_url
return ''
reference_link.allow_tags = True
class UserAdmin(UserAdmin):
inlines = (UserProfileReferenceInline, )
admin.site.register(User, UserAdmin)
这只是一个如何完成的示例,上面的代码可能需要进行一些调整才能适合您的项目。