【问题标题】:Django autocomplete light, taggit and the admin interfaceDjango 自动完成灯、taggit 和管理界面
【发布时间】:2014-01-10 19:09:27
【问题描述】:

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

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

到目前为止我已经得到了什么。

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)

如何将两者结合起来?

【问题讨论】:

    标签: django django-admin django-taggit django-autocomplete-light


    【解决方案1】:

    我应该如何构建 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)
    

    autocomplete_light_registry.py

    import autocomplete_light
    from taggit.models import Tag
    
    autocomplete_light.register(Tag)
    

    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'),
            }
    

    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)
    

    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
    

    urls.py

    from django.conf.urls import patterns, url
    from views import CreateMyModel
    
    urlpatterns = patterns('',
         url(r'^create/$', CreateMyModel.as_view()),
    )
    

    quick docs 似乎比您查看的文档更易于理解。

    【讨论】:

    • 谢谢。这让它发挥作用。顺便说一句,我在urls.py 中使用url(r'autocomplete/', include('autocomplete_light.urls')),,但我确信还有其他方法。
    • 其实……这还是有问题的。添加新记录时它工作正常,但是当我去编辑现有记录时,我得到:Error during template rendering In template (...)/local/lib/python2.7/site-packages/django/contrib/admin/templates/admin/includes/fieldset.html, error at line 19 int() argument must be a string or a number, not 'QuerySet'
    • 我刚刚编辑了我的答案并更改了 forms.py 和 admin.py。这应该让您编辑记录。我仍然看到以不同格式加载的标签存在问题,我会调查一下,但至少这给了你一个开始的地方。
    • 谢谢 - 做到了。看到替代方案后,我更喜欢 MultipleChoiceWidget 而不是 TextWidget - 但似乎 autocomplete_light 不支持...。
    • 现在这里有一些关于 Auto Complete Light 和 Taggit 集成的文档:django-autocomplete-light.readthedocs.io/en/master/taggit.html
    【解决方案2】:

    考虑改用django-taggit-autosuggest

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

    【讨论】:

    • 嗨,我正在尝试将 django-taggit-autosuggest 与 djang 1.10 一起使用,但我遇到了 url 模式问题... urlpatterns = patterns('taggit_autosuggest.views', NameError: name 'patterns'未定义。
    • django.conf.urls.patterns() 已弃用,请将您的 urlpatterns 更新为 django.conf.urls.url() 实例的列表。
    猜你喜欢
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 2018-06-27
    • 1970-01-01
    • 2015-06-20
    • 2018-01-21
    相关资源
    最近更新 更多