在模型的管理面板中打开时,CoinTransaction
该字段user
是一个下拉列表。由于大约有 2 万用户,所以这个页面渲染了很长时间。此外,它不是唯一的领域ForeignKey
。有必要将下拉列表中的小部件替换为可以输入的输入字段User.id
设法更改 ForeignKey 的小部件,但未保存数据。给出这样的错误:
无法分配“30784”:“CoinTransaction.user”必须是“用户”实例
注:30784
是用户IDUser
模型.py:
class User(AbstractUser):
"""Пользователь"""
...
def __str__(self):
return f'{self.last_name} {self.first_name}'
class Meta:
verbose_name = 'Пользователь'
verbose_name_plural = 'Пользователи'
class CoinTransaction(models.Model):
"""Монеты пользователей"""
...
user = models.ForeignKey(User, verbose_name='Пользователь', on_delete=models.CASCADE)
...
管理员.py
class CoinTransactionAdminForm(forms.ModelForm):
"""Изменяем виджеты"""
user = forms.IntegerField(label='Id пользователя')
class Meta:
model = CoinTransaction
fields = '__all__'
@admin.register(CoinTransaction)
class CoinTransactionAdmin(admin.ModelAdmin):
"""Транзакции монет"""
list_display = ('id', 'user', 'amount', 'operation_type', 'order')
list_display_links = ('id', 'user',)
def get_form(self, request, obj=None, **kwargs):
"""Я не до конца понимаю смысл этого метода"""
if request.user.is_superuser:
kwargs['form'] = CoinTransactionAdminForm
return super().get_form(request, obj, **kwargs)
ForeignKeyRawIdWidget
通过创建自己的表单将标准小部件更改为管理员.py: