I am trying to save data from a form into a database table named 'ModuleNames', but it is updating 'ModuleType' column of foreign(instance) table.
I created an instance of said foreign table because it was giving a different error about assigning value to the foreign key column and from various blogs I learned that the instance is needed, but it seems it is not the correct way. I am really unsure what to do now?
models.py
class ModuleTypes(models.Model): ModuleType = models.CharField(max_length = 50) ModuleDesc = models.CharField(max_length = 256) Sort = models.SmallIntegerField() isActive = models.BooleanField() slug = models.SlugField(('Type'), max_length=50, blank=True) class Meta: app_label = 'zz' def save(self, *args, **kwargs): if not self.id: self.slug = slugify(self.Type) super(ModuleTypes, self).save(*args, **kwargs) class ModuleNames(models.Model): ModuleName = models.CharField(max_length = 50) ModuleDesc = models.CharField(max_length = 256) ModuleSort = models.SmallIntegerField() isActive = models.BooleanField() ModuleType = models.ForeignKey(ModuleTypes, on_delete=models.CASCADE, null = True) slug = models.SlugField(('ModuleName'), max_length=50, blank=True) class Meta: app_label = 'zz' def __unicode__(self): return self.status
forms.py
class ModuleForm(forms.ModelForm): moduleName = forms.CharField(label='Module Name', max_length=50) ModuleDesc = forms.CharField(max_length = 256) ModuleSort = forms.IntegerField() isActive = forms.BooleanField() ModuleType = forms.IntegerField() class Meta: model = ModuleNames fields = ('moduleName','ModuleDesc','ModuleSort','isActive','ModuleType')
views.py
def addmodule(request,moduletype): template_name = 'module.html' modules = ModuleNames.objects.all() listmodules = ModuleTypes.objects.get(ModuleType=moduletype) modules = ModuleNames.objects.filter(ModuleType_id=listmodules) if request.method == 'GET': args = {'modules': modules } return render(request,template_name, args) if request.method == 'POST': form = ModuleForm(request.POST, instance=ModuleTypes.objects.get(ModuleType=moduletype)) if form.is_valid(): #form.pop('csrfmiddlewaretoken', None)It is annoying this part because of that i put in comment. post = form.save(commit=False) post.save() else: #raise error return render(request, template_name, {'modules': modules})
Thanks
I don't get any error by above code but i get below error when not using 'instance' of foreign table
Environment: Request Method: POST Request URL: http://127.0.0.1:8000/module/nav-tab/new Django Version: 2.1.3 Python Version: 3.7.1 Installed Applications: ['Comp', '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'] Traceback: File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner 34. response = get_response(request) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response 126. response = self.process_exception_by_middleware(e, request) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response 124. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/utils/decorators.py" in _wrapped_view 142. response = view_func(request, *args, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/utils/decorators.py" in _wrapped_view 142. response = view_func(request, *args, **kwargs) File "/Users/cem/Documents/Projects/DevComp/Comp/views.py" in addmodule 133. if form.is_valid(): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/forms/forms.py" in is_valid 185. return self.is_bound and not self.errors File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/forms/forms.py" in errors 180. self.full_clean() File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/forms/forms.py" in full_clean 383. self._post_clean() File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/forms/models.py" in _post_clean 398. self.instance = construct_instance(self, self.instance, opts.fields, opts.exclude) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/forms/models.py" in construct_instance 60. f.save_form_data(instance, cleaned_data[f.name]) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/models/fields/__init__.py" in save_form_data 854. setattr(instance, self.name, data) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/models/fields/related_descriptors.py" in __set__ 210. self.field.remote_field.model._meta.object_name, Exception Type: ValueError at /module/nav-tab/new Exception Value: Cannot assign "1": "ModuleNames.ModuleType" must be a "ModuleTypes" instance.
score:0
I think the problem is here:
form = ModuleForm(request.POST, instance=ModuleTypes.objects.get(ModuleType=moduletype)) # <-- here
You are passing ModuleTypes
as instance where your should be passing ModuleNames
model instance. So you should update the form like this:
form = ModuleForm(request.POST, instance=ModuleNames.objects.get(ModuleType=listmodules)) # listmodules is a ModuleType object
Also minor refactoring:
if request.method == 'POST':
form = ModuleForm(request.POST, instance=ModuleNames.objects.get(ModuleType=listmodules))
if form.is_valid(): # <-- valid check in post request
#form.pop('csrfmiddlewaretoken', None)It is annoying this part because of that i put in comment.
post = form.save()
return render(request, template_name, {'modules': modules})
And also please use snake_case
in Model Field(Model class's attribute) definitions as per PEP8 Style Guide.
Credit To: stackoverflow.com
Related Query
- Unable to save data from Django form
- save data from form with custom foreign key field in django
- How can i save data to text file from django form inputs?
- Django Form (Checkbox) - unable to save data
- Unable to get data from django choice form
- Populate a django form with data from database in view
- Save form data in Django
- Django form - in-place edit of data from reverse foreign key join
- Django Rest Framework Save Data from Serializer to Model
- Django - Get data from a form that is not a django.form
- Passing parameters from partial form to model during save Django
- How can I efficiently save data from geopandas to django (converting from shapely to geodjango)?
- Django unable to delete/clear data on form
- Submitting data from a form to django view
- How to prevent browser from refilling form data when navigating back in Django
- how to send form data from one page to another using django
- Populate CheckboxSelectMultiple with existing data from django model form
- Unable to bound form data after upgrading to django 1.5.1
- Load Django Form Object with data from Model instance already "loaded"
- Retrieving POST data from jQuery in Django without a form
- get data from django form and print in console
- simplest way to save or display data for form in django
- Django Ckeditor Save incomplete data from richtextfield to cookies or server
- Sending data from React form to Django Rest Framework without a Model
- Initial form data from model - Django
- How does a Django form know where to save its data when not using ModelForm?
- Django - Manipulating Data Posted from a form
- Django, save data from form without having to manually set each field to save?
- Django DetailView form dont save data
- Fill out Django form with data obtained from URL
More Query from same tag
- How to insert a deserialized django object?
- Setting MEDIA_URL for Django Heroku App, Amazon S3
- Wagtail Recaptcha Localhost - SSL: CERTIFICATE_VERIFY_FAILED
- Returning data on POST in django-tastypie
- Django Custom Querysets
- django urls.exceptions.NoReverseMatch error happens when I want to use reverse function in unittests?
- how to sum all the consummations?
- Django puts new line at end of variable where flask does not
- Go for Zend framework or Django for a modular web application?
- Different methods to deploy Django project and their pros and cons?
- When and why should I switch from functional Selenium testing to unit testing in a Django web app?
- datamigration from datefield to datetimefield
- Complex grouping and averages in Django
- Want to show detailview, clicking in a link in a listview
- Passing JSON data to the front end using Django