简体   繁体   中英

Django admin inline has 2 foreign keys to the same model

Currently i have the transfer model as followed:

class Transfers(models.Model):
    class Meta:
        db_table = "transfers"
        verbose_name = 'Transfer'
        verbose_name_plural = 'Transfers'
user = models.ForeignKey("backend.User", null=True, blank=True, related_name='user_transfer', on_delete=models.CASCADE)

to_account = models.ForeignKey("backend.User", null=True, blank=True, related_name='user_transfer_to_account', on_delete=models.SET_NULL)

A transfer object need to have from one user transfer to another user so i need to use the same User model

And in my admin.py:

class TransfersInline(admin.StackedInline):
    model = Transfers

    can_delete = False
    extra = 0
    max_num=0

    form = TransfersAdminForm

class UserAdminCustom(admin.ModelAdmin):

    exclude = ('password', 'last_login', 'is_superuser', 'is_staff', 'groups',
               'user_permissions', 'username', 'first_name', 'last_name', 'is_active', 'date_joined')

    inlines = [
        TransfersInline,
    ]

    def get_queryset(self, request):
        qs = super(UserAdminCustom, self).get_queryset(request)
        return qs.filter(is_staff=False)

    def get_readonly_fields(self, request, obj=None):
        return ('id', 'created', 'modified')


admin.site.register(User, UserAdminCustom)

In my admin i would like to display transfers inline that the User existed in user field of Transfers model but inline can't have multiple foreign key to the same model:

<class 'backend.admin.TransfersInline'>: (admin.E202) 'backend.Transfers' has more than one ForeignKey to 'backend.User'

My question is how do i only make TransfersInline use foreign key from user field instead of to_account field? (transfer inline will have all the transfers object that the User is in user field )

Use fk_name='user' option for TransfersInline class.

You can check the docs

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM