我有一个 OneToOneField 和我的 User 和 UserProfile 模型。和第二个模型交易。创建事务时,它需要一个外键用户对象。
我想要的是使用 OneToOneField UserProfile 来显示与该用户相关的事务对象。用交易对象的 str 表示。
所以它看起来像这样:
另一个例子是,假设我的数据库是
userid_id transaction_id
2 1
2 2
4 3
4 4
Run Code Online (Sandbox Code Playgroud)
然后每当我从管理面板查看用户 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)
Run Code Online (Sandbox Code Playgroud)
在我的管理面板中
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)
Run Code Online (Sandbox Code Playgroud)
默认情况下,Django Admin 不支持嵌套内联(据我了解,您需要嵌套内联)。但是,有几种解决方法。
使用第三方包
您可以简单地使用Django-super-inlines包,遵循包 GitHub 页面上的安装过程和示例。
此外,还有django-nested-admin可以帮助您。
admin对同一模型使用两个类并将它们链接起来
我们可以定义一个从UserProfile到的链接,而不是使用第三方包进行嵌套内联Transaction。
为此,您需要创建两个模型admin类UserProfile,扩展 baseModelAdmin和TabularInline,并编写一个简单的自定义方法:
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)
Run Code Online (Sandbox Code Playgroud)
这只是如何完成的一个示例,上面的代码可能需要进行一些调整才能适合您的项目。
| 归档时间: |
|
| 查看次数: |
1189 次 |
| 最近记录: |