首页 > 解决方案 > Django AutoComplete Light 不适用于 OneToOne 字段

问题描述

我正在尝试使用django-autocomplete-light在 Django 管理员中为OneToOneField添加自动完成功能。该字段在 Django Rest Framework 的auth_token 模型中可用。

class Token(models.Model):
    """
    The default authorization token model.
    """
    key = models.CharField(_("Key"), max_length=40, primary_key=True)
    user = models.OneToOneField(
        settings.AUTH_USER_MODEL, related_name='auth_token',
        on_delete=models.CASCADE, verbose_name=_("User")
    )
    created = models.DateTimeField(_("Created"), auto_now_add=True)

模型.py

from rest_framework.authtoken.models import Token


class CustomAuthTokenModel(Token):
    search_fields = ['user', ]

    def __str__(self):
        return str(self.user)

视图.py

from dal import autocomplete
from rest_framework.authtoken.models import Token


class AuthUserAutocompleteView(autocomplete.Select2QuerySetView):
    def get_queryset(self):

        qs = Token.objects.all().order_by('user__username')

        if self.q:
            qs = qs.filter(user__username__icontains=self.q)

        return qs

管理员.py

from django.contrib import admin

from rest_framework.authtoken.models import Token
from rest_framework.authtoken.admin import TokenAdmin
from .forms import AuthUserForm


class CustomTokenAdmin(TokenAdmin):
    form = AuthUserForm


admin.site.unregister(Token)
admin.site.register(Token, CustomTokenAdmin)

表格.py

from dal import autocomplete
from .models import CustomAuthTokenModel


class AuthUserForm(autocomplete.FutureModelForm):
    class Meta:
        model = CustomAuthTokenModel
        fields = ('user', )
        search_fields = ['user__username']
        widgets = {
            'user': autocomplete.ModelSelect2(url='autocomplete_auth_user')
        }

在 urls.py 文件中,我有:

url('^autocomplete_auth_user/$', AuthUserAutocompleteView.as_view(), name='autocomplete_auth_user')

我很确定,我一定遗漏了一些东西,因为在管理面板中输入表单以获取身份验证令牌时,我看不到用户名。让我知道我错过了什么。我正在使用 Django 1.11 和 django-autocomplete light 3.2.10。

标签: pythondjangodjango-modelsdjango-viewsdjango-autocomplete-light

解决方案


推荐阅读