Django自动完成light,taggit和管理界面

Luk*_*uke 3 django django-admin django-taggit django-autocomplete-light

我正在尝试在管理表单上使用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)
Run Code Online (Sandbox Code Playgroud)

autocomplete_light_registry.py:

import autocomplete_light
from models import MyTag
autocomplete_light.register(MyTag)
Run Code Online (Sandbox Code Playgroud)

我的结构是什么意思admin.py

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

tags = TagField(widget = TagWidget('MyTagAutocomplete'))
Run Code Online (Sandbox Code Playgroud)

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

form = autocomplete_light.modelform_factory(MyTag)
Run Code Online (Sandbox Code Playgroud)

我该如何将两者结合起来?

seb*_*ian 5

我是怎么构建admin.py的?

以下是自动填充标签的示例.它向您展示了autocomplete_light和taggit如何在管理员和非管理员表单上工作.

models.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)
Run Code Online (Sandbox Code Playgroud)

autocomplete_light_registry.py

import autocomplete_light
from taggit.models import Tag

autocomplete_light.register(Tag)
Run Code Online (Sandbox Code Playgroud)

forms.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'),
        }
Run Code Online (Sandbox Code Playgroud)

admin.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)
Run Code Online (Sandbox Code Playgroud)

views.py

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

class CreateMyModel(CreateView):
    model = MyModel
    form_class = MyModelForm
Run Code Online (Sandbox Code Playgroud)

urls.py

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

urlpatterns = patterns('',
     url(r'^create/$', CreateMyModel.as_view()),
)
Run Code Online (Sandbox Code Playgroud)

快速文档似乎更直截了当比你正在看的文档来了解.