I want to add Select field to form for field with type ForeignKey and use for this ModelChoiceField. But this form doesn`t rendering and throw error
"'str' object is not callable"
on the line " {{ form_ord.all_users}} {{ form_ord.pay_method }} {{ form_ord.pay }}" in order_add.html file.
What can I use to create form for model with ForeignKey field?
order.py
class Order(models.Model):
PAY_METHOD_CHOISES = (
('CASH', 'cash'),
('CREDIT', 'credit card'),
('CHECK', 'check'),
)
pay_method = models.CharField(max_length=15, choices=PAY_METHOD_CHOISES,
default='cash')
user_id = models.ForeignKey(UsersData)
pay = models.BooleanField(default=False)
@property
def __str__(self):
return self.user_id.user_name
def pay_or_not(self):
if self.pay:
result = 'paid'
else:
result = 'not paid'
return result
class OrderForm(ModelForm):
all_users = forms.ModelChoiceField(queryset=UsersData.objects.all(),
empty_label=None, initial=0)
class Meta:
model = Order
fields = ['user_id', 'pay_method', 'pay', 'all_users']
view_order.py
def order_add(request):
if request.method == 'POST':
form_order = OrderForm(request.POST)
if form_order.is_valid():
part_order_form = form_order.save(commit=False)
value_user = form_order.cleaned_data.get('all_users')
user = UsersData.objects.get(use_name=value_user)
part_order_form.user_id = user
part_order_form.save()
return HttpResponseRedirect('/sushi_rinjin/orders/')
else:
form_order = OrderForm()
return render(request, 'sushi_rinjin/forms/order_add.html',
{'form_ord': form_order})
order_add.html
<form action="{% url 'sushi_rinjin:add_order' %}" method="post">
{% csrf_token %}
{{ form_ord.all_users}} {{ form_ord.pay_method }} {{ form_ord.pay }}
<input type="submit" value="Add Order" />
</form>
Traceback:
Environment:
Request Method: GET Request URL: http://127.0.0.1:8000/sushi_rinjin/order_add/
Django Version: 1.11.6 Python Version: 3.5.3 Installed Applications: ['sushi_rinjin.apps.SushiRinjinConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles'] Installed Middleware: ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware']
Template error: In template /home/anastasiia/Документы/Python-Programs.git/Py_Project/sushi/sushi_rinjin/templates/sushi_rinjin/forms/order_add.html, error at line 3 'str' object is not callable 1 : 2 : {% csrf_token %} 3 : {{ form_ord.all_users}} {{ form_ord.pay_method }} {{ form_ord.pay }} 4 : 5 :
Traceback:
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/exception.py" in inner 41. response = get_response(request)
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py" in _get_response 187. response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py" in _get_response 185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/anastasiia/Документы/Python-Programs.git/Py_Project/sushi/sushi_rinjin/views/view_order.py" in order_add 46. {'form_ord': form_order})
File "/usr/local/lib/python3.5/dist-packages/django/shortcuts.py" in render 30. content = loader.render_to_string(template_name, context, request, using=using)
File "/usr/local/lib/python3.5/dist-packages/django/template/loader.py" in render_to_string 68. return template.render(context, request)
File "/usr/local/lib/python3.5/dist-packages/django/template/backends/django.py" in render 66. return self.template.render(context)
File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render 207. return self._render(context)
File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in _render 199. return self.nodelist.render(context)
File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render 990. bit = node.render_annotated(context)
File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render_annotated 957. return self.render(context)
File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render 1046. return render_value_in_context(output, context)
File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render_value_in_context 1024. value = force_text(value)
File "/usr/local/lib/python3.5/dist-packages/django/utils/encoding.py" in force_text 76. s = six.text_type(s)
File "/usr/local/lib/python3.5/dist-packages/django/utils/html.py" in 385. klass.str = lambda self: mark_safe(klass_str(self))
File "/usr/local/lib/python3.5/dist-packages/django/forms/boundfield.py" in str 41. return self.as_widget()
File "/usr/local/lib/python3.5/dist-packages/django/forms/boundfield.py" in as_widget 101. attrs = self.build_widget_attrs(attrs, widget)
File "/usr/local/lib/python3.5/dist-packages/django/forms/boundfield.py" in build_widget_attrs 257. if widget.use_required_attribute(self.initial) and self.field.required and self.form.use_required_attribute:
File "/usr/local/lib/python3.5/dist-packages/django/forms/widgets.py" in use_required_attribute 689. first_choice = next(iter(self.choices), None)
File "/usr/local/lib/python3.5/dist-packages/django/forms/models.py" in iter 1140. yield self.choice(obj)
File "/usr/local/lib/python3.5/dist-packages/django/forms/models.py" in choice 1146. return (self.field.prepare_value(obj), self.field.label_from_instance(obj))
File "/usr/local/lib/python3.5/dist-packages/django/forms/models.py" in label_from_instance 1211. return force_text(obj)
File "/usr/local/lib/python3.5/dist-packages/django/utils/encoding.py" in force_text 76. s = six.text_type(s)
Exception Type: TypeError at /sushi_rinjin/order_add/ Exception Value: 'str' object is not callable
urlpatterns = [
url(r'^$', view_index.index, name='index'),
url(r'menu/', view_menu.index, name='menu'),
url(r'ingredients/', view_ingred.index, name='ingredients'),
url(r'orders/', view_order.index, name='orders'),
url(r'^order/(?P<id_order>[0-9]+)/$', view_order.detail, name='detail'),
url(r'ingredient_add/', view_ingred.ingred_add, name='add_ingred'),
url(r'dish_add/', view_menu.dish_add, name='add_dish'),
url(r'order_add/', view_order.order_add, name='add_order'),
]
{{ form_ord }}
and why you addall_users
if you have the fielduser_id
? – Brown Bearinitial=None
or remove this param. – Abbasov Alexander