Reputation: 1406
I have forms.py
in a Django app.
from django import forms
from django.core.urlresolvers import reverse_lazy
class ComposeMessageForm(forms.Form):
ccc = reverse_lazy('user_api')
st = 'customSelectize:u_r,modelUrl:"'+ reverse_lazy('user_api') +'", choiceField:"username"'
user_receivers = forms.ModelMultipleChoiceField(
queryset=User.objects.all(),
required=False,
widget=forms.SelectMultiple(
attrs={
'data-bind': st,
'placeholder': 'Select USERS'}))
When I run it I get
TypeError at /message/compose/
cannot concatenate 'str' and '__proxy__' objects
How can this be done? I have no idea what __proxy__
object is.
urls.py
is:
from django.conf.urls import patterns, include, url
from rest_framework.urlpatterns import format_suffix_patterns
from django.contrib import admin
from msgin import views
urlpatterns = patterns('',
url(r'^$', 'ms.views.home', name='home'),
url(r'^message/', include('msgin.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^msgs/$', views.MessageList.as_view()),
url(r'^msgs/(?P<pk>[0-9]+)/$',
views.MessageDetail.as_view()),
url(r'^users/$', views.UserList.as_view(),
name='user_api'),
url(r'^users/(?P<pk>[0-9]+)/$',
views.UserDetail.as_view()),
url(r'^groups/$', views.GroupList.as_view(),
name='groups_api'),
url(r'^groups/(?P<pk>[0-9]+)/$',
views.GroupDetail.as_view()),
)
Upvotes: 1
Views: 4010
Reputation: 4590
Just put it inside str()
from django.utils.translation import ugettext_lazy as _
str(self.price) + " " + str(_("USD"))
Upvotes: 2
Reputation: 3806
there is no benefit to use reverse_lazy
in the class definition, as cannot be "lazy"
you two options
1) use reverse
2) change your code as
class ComposeMessageForm(forms.Form):
user_receivers = forms.ModelMultipleChoiceField(queryset=User.objects.all(),
required=False)
def __init__(self, *args, **kwargs):
super(ComposeMessageForm, self).__init__(*args, **kwargs)
st = 'customSelectize:u_r,modelUrl:"%s", choiceField:"username"' % reverse_lazy('user_api')
self.fields['user_receivers'].widget=forms.SelectMultiple(attrs={'data-bind': st,
'placeholder': 'Select USERS'})
Upvotes: 1
Reputation: 45575
proxy url is the url which resolves later, not at the time of calling reverse_lazy()
func. For this concrete case you can use simple reverse()
function instead of lazy one.
But if want use reverse_lazy()
when you should coerce proxy url to string:
st = 'customSelectize:u_r,modelUrl:"'+ str(reverse_lazy('user_api')) +'", choiceField:"username"'
or use string formatting:
st = 'customSelectize:u_r,modelUrl:"%s", choiceField:"username"' % reverse_lazy('user_api')
Upvotes: 0