You are not referencing the form in the template that is generated by the UpdateView. Check out https://ccbv.co.uk/projects/Django/2.0/django.views.generic.edit/UpdateView/. If you want to have two forms in a view, that’s fine, but you’ll need to manually add the second form in the get_context_data method, and you’ll have to generate your own class for it.
In your template, you’ll need to access the form context variable. Maybe start out with {{ form.as_p }} to see what is generated, and if you really want to get crazy, you can use Django Crispy Forms. From: django-users@googlegroups.com [mailto:django-users@googlegroups.com] On Behalf Of clavierpla...@gmail.com Sent: Tuesday, November 20, 2018 8:55 AM To: Django users Subject: UpdateView: input always rejected I need to render some form fields by hand in order to meet style requirements. I am using UpdateView instead of a ModelForm since I just need a couple of foreign key fields that are already defined on the model, and I am using html <select> elements to prevent invalid data from being entered. I'm running into trouble because when I choose an option and click the submit button, Django rejects the input and raises a validation error because the field is required. I know the data should be valid because it all came straight from the database, but Django appears to be throwing it away. I can't find UpdateView's clean() methods to try to catch the error that way. I've tried overriding post() just to see where the problem is occurring, but the option I chose seemed to just disappear; I don't know what Django is doing with it or why it thinks its invalid, so I don't know where to try to catch and fix the problem. I have two separate html forms with two submit buttons; I separated them because they seemed easier to style that way, and also because users will generally need to change one or the other, not both; but two forms might be the wrong way to go about it. But that doesn't explain why data that came straight from the database is invalid. They both fail with the same ValidationErrors (i.e. fields are required). Thank you for any ideas or insight! Heather class Order(models.Model): order_id = models.IntegerField(primary_key=True) # (Some additional model fields.) service_level = models.ForeignKey('manifest.ServiceLevel', on_delete=models.PROTECT) priority = models.ForeignKey('fulfillment.Priority', on_delete=models.PROTECT) class Priority(models.Model): """fulfillment priority levels""" TYPES = Choices( ('FR', 'FLASH_RUSH', 'Flash Rush'), ('RU', 'RUSH', 'Rush'), ('RG', 'REGULAR', 'Regular'), ) code = models.CharField(max_length=2, choices=TYPES) name = models.CharField(max_length=50) class ServiceLevel(models.Model): """levels of service which a carrier provides""" code = models.CharField(max_length=10, primary_key=True) name = models.CharField(max_length=50) # (Some additional model fields.) class WMSOrderUpdateView(UpdateView): context_object_name = 'order' template_name = 'fulfillment/order_detail.html' fields = ['priority', 'service_level'] def get_context_data(self, **kwargs): context = super().get_context_data() context['priorities'] = Priority.objects.all() context['ship_methods'] = ServiceLevel.objects.all() return context <ul class="list-group-flush"> <li class="list-group-item"> <form method="post"> {% csrf_token %} <label for="priority"> {% if order.priority.code == 'FR' %} <span class="badge badge-pill badge-danger"> {% elif order.priority.code == 'RU' %} <span class="badge badge-pill badge-warning"> {% else %} <span class="badge badge-pill badge-success"> Priority: {% endif %} </span> </label> <select id="priority" name="change_priority"> {% for priority in priorities %} <option value="{{ priority.id}}" {% if priority.code == order.priority.code %}selected{% endif %}>{{ priority.name }}</option> {% endfor %} </select> <input class="btn btn-primary" type="submit" value="Apply"> </form> </li> <li class="list-group-item"> <form method="post"> {% csrf_token %} <label for="ship_method"><strong>Shipping Method: </strong></label> <select id="ship_method" name="change_method"> {% for method in ship_methods %} <option value="{{ method.code }}" {% if method.code == order.service_level.code %}selected{% endif %}>{{ method.name|title }}</option> {% endfor %} </select> <input class="btn btn-primary" type="submit" value="Apply"> </form> </li> <!-- A few more <li> elements go here, but they're for display only. No form fields. --> </ul> -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscr...@googlegroups.com<mailto:django-users+unsubscr...@googlegroups.com>. To post to this group, send email to django-users@googlegroups.com<mailto:django-users@googlegroups.com>. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/26b1dcbd-54c7-431c-bd0e-5740ba470aa3%40googlegroups.com<https://groups.google.com/d/msgid/django-users/26b1dcbd-54c7-431c-bd0e-5740ba470aa3%40googlegroups.com?utm_medium=email&utm_source=footer>. For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscr...@googlegroups.com. To post to this group, send email to django-users@googlegroups.com. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/f4eadd0dcab849bca336d29c5a5e2157%40iss2.ISS.LOCAL. For more options, visit https://groups.google.com/d/optout.