4

我正在尝试在管理表单上同时使用 autocomplete_light 和 taggit。

我在这里阅读了关于集成自动完成光和 taggit的文档,以及关于在管理员中集成自动完成光的文档。但似乎很少(或根本没有)讨论同时做这两项工作。

到目前为止我所拥有的。

models.py

from django.db import models
from taggit.managers import TaggableManager
from taggit.models import TagBase, GenericTaggedItemBase


class MyTag(TagBase):
    description = models.CharField(max_length = 250, blank = True, null = True)

class MyTagThroughModel(GenericTaggedItemBase):
    tag = models.ForeignKey(MyTag, related_name = "tagged_items")

class MyModel(models.Model):
    Name = models.CharField(max_length = 200)
    ...
    tags = TaggableManager(through = MyTagThroughModel)

autocomplete_light_registry.py

import autocomplete_light
from models import MyTag
autocomplete_light.register(MyTag)

我的意思是如何构建admin.py

如果这是一个非管理员表单,则该字段将被指定为:

tags = TagField(widget = TagWidget('MyTagAutocomplete'))

如果这是一个非 taggit 管理表单,我会在管理模型类中添加以下内容:

form = autocomplete_light.modelform_factory(MyTag)

我怎样才能将两者结合起来?

4

2 回答 2

5

我应该如何构建 admin.py?

这是自动完成标签的示例。它向您展示了 autocomplete_light 和 taggit 如何在管理员和非管理员表单上工作。

模型.py

from django.db import models
from taggit.managers import TaggableManager

class MyModel(models.Model):
    name = models.CharField(max_length = 200)
    tags = TaggableManager(blank=True)

autocomplete_light_registry.py

import autocomplete_light
from taggit.models import Tag

autocomplete_light.register(Tag)

表格.py

from django import forms
import autocomplete_light
from autocomplete_light.contrib import taggit_tagfield
from models import MyModel

class MyModelForm(forms.ModelForm):
    tags = taggit_tagfield.TagField(widget=taggit_tagfield.TagWidget('TagAutocomplete'))
    class Meta:
        model = MyModel
        widgets = {
            'tags': autocomplete_light.TextWidget('TagAutocomplete'),
        }

管理员.py

from django.contrib import admin
import autocomplete_light
from models import MyModel
from forms import MyModelForm

class MyModelAdmin(admin.ModelAdmin):
    form = MyModelForm
    model = MyModel

admin.site.register(MyModel, MyModelAdmin)

视图.py

from django.views.generic.edit import CreateView
from models import MyModel
from forms import  MyModelForm

class CreateMyModel(CreateView):
    model = MyModel
    form_class = MyModelForm

网址.py

from django.conf.urls import patterns, url
from views import CreateMyModel

urlpatterns = patterns('',
     url(r'^create/$', CreateMyModel.as_view()),
)

快速文档似乎比您正在查看的文档更易于理解。

于 2014-01-12T21:32:56.860 回答
3

考虑改用django-taggit-autosuggest

在 Django 上标记自动完成自动建议

它最适合django-grapelli管理员皮肤。

于 2016-04-05T07:25:19.587 回答