我有一個使用FilteredSelectMultiple小部件的ModelForm。當我以我創建的超級用戶身份登錄時,它工作得很好。但是,如果未登錄,我無法在窗體中看到小部件,只能看到所有項目的列表(如多選)。所以我的問題是:爲什麼FilteredSelectMultiple在登錄時工作得很好,但在退出時不在那裏?Django的FilteredSelectMultiple小部件僅在登錄時才起作用
我還沒有設置類似的任何地方,我能想到的任何許可或任何東西。
這裏是我的代碼部分:
forms.py
from django.contrib.admin.widgets import FilteredSelectMultiple
class MyModelForm(forms.ModelForm):
my_field = forms.ModelMultipleChoiceField(queryset=Something.objects.all(), widget=FilteredSelectMultiple("Somethings", is_stacked=False), required=False)
class Media:
css = {
'all': (os.path.join(settings.BASE_DIR, '/static/admin/css/widgets.css'),),
}
js = ('/admin/jsi18n'),
class Meta:
model = MyModel
fields = ('some_field', 'some_other_field')
form.html
{% extends base.html %}
{% block head %}
{% load staticfiles %}
some stuff
{% endblock head %}
{% block content %}
<script type="text/javascript" src="{% url 'jsi18n' %}" > </script>
{{ form.media }}
<form enctype="multipart/form-data" method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="save btn btn-default">Submit</button>
</form>
{% endblock content %}
urls.py
url(r'^admin/jsi18n/$',
'django.views.i18n.javascript_catalog',
name='jsi18n'
),
告訴我,如果你需要任何其他代碼。 (我使用Django 1.8和Python 2.7)
編輯
當加載頁面時註銷,控制檯顯示以下內容:
jsi18n : SyntaxError: expected expression, got '<'
jsi18n : SyntaxError: expected expression, got '<'
SelectFilter2.js : ReferenceError: interpolate is not defined
這些消息都沒有出現,當我在我登錄作爲超級用戶。
EDIT 2
正如答案的建議,我試圖改變我的媒體類:
class Media:
# Nécessaire pour l'affichage de FilteredSelectMultiple
css = {
'all': (os.path.join(settings.BASE_DIR, '/static/admin/css/widgets.css'),),
}
extra = '' if settings.DEBUG else '.min'
js = ('/admin/jsi18n', 'jquery%s.js' % extra, 'jquery.init.js', 'core.js', 'SelectBox.js', 'SelectFilter2.js'),
導致一個AttributeError:
AttributeError at /my/url/form
'tuple' object has no attribute 'startswith'
[...]
Exception Location: /path/to/virtualenv/local/lib/python2.7/site-packages/django/forms/widgets.py in absolute_path, line 74
我也嘗試改變我的模板:
<script type="text/javascript" src="{% url 'jsi18n' %}" > </script>
<script type="text/javascript" src="{% static 'admin/js/jquery.min.js' %}"></script>
<script type="text/javascript" src="{% static 'admin/js/jquery.init.js' %}"></script>
<script type="text/javascript" src="{% static 'admin/js/core.js' %}"></script>
<script type="text/javascript" src="{% static 'admin/js/SelectBox.js' %}"></script>
<script type="text/javascript" src="{% static 'admin/js/SelectFilter2.js' %}"></script>
{{ form.media }}
它沒有產生任何錯誤,但什麼也沒有改變我的問題:(
任何其他的想法?
看起來很簡單!非常感謝!對不起,我沒有足夠的代表upvote ... – iHaveNoIdeaWhatsoever
你很歡迎; 'tuple'對象沒有屬性'startswith'錯誤應該是因爲我們的Media類屬性定義中多了額外的逗號(,)? – sergiuz