Django class-based UpdateView -


we using django 1.9.5. writing update company profile view. want have 2 fields on update profile page:

  • company name,
  • apikey(generated dedicated function).

i want change field name hands , save clicking button update. filed apikey want have separated button automatically generate new key, save db , update page.

i overwriting post method @ updateview class. simething isn't working. please take @ code:

models.py:

class organization(models.model):      name = models.charfield(_('organisation display name'), max_length=512,                             blank=true)       apikey = models.charfield(_("api authentication key"), max_length=apikey_length,                               default=get_apikey) 

where get_apikey

from django.utils.crypto import get_random_string   apikey_prefix = "key-" apikey_length = 80   def get_apikey():     rnd_len = apikey_length - len(apikey_prefix)     return "{}{}".format(             apikey_prefix,             get_random_string(rnd_len, "abcdefghijklmnopqrstuvwxyz0123456789")     ) 

forms.py:

from django import forms crispy_forms.helper import formhelper, layout orgs.models import organization   class orgprofileform(forms.modelform):     def __init__(self, *args, **kwargs):         super(orgprofileform, self).__init__(*args, **kwargs)         self.helper = formhelper()         self.helper.form_tag = false      class meta:         model = organization         fields = ['name', 'apikey'] 

views.py

from django.views.generic.edit import updateview, baseupdateview orgs.forms import orgprofileform orgs.models import organization local.auth import get_apikey   class orgprofileview(updateview):     model = organization     template_name = 'orgs/orgprofile.html'     form_class = orgprofileform     url_name = 'profile'     success_url = '/'      def get_object(self, queryset=none):         org_obj = organization.objects.get(orgname=self.kwargs["orgname"])         return org_obj      def post(self, request, *args, **kwargs):         import ipdb         ipdb.set_trace()         if '_key' in request.post:             org_obj = organization.objects.get(orgname=self.kwargs["orgname"])             org_obj.apikey = get_apikey()             org_obj.save()         self.object = org_obj         return super(baseupdateview, self).post(request, *args, **kwargs) 

template.html

{% extends "base.html" %} {% load i18n %} {% load staticfiles %} {% load crispy_forms_tags %}  {% block title %}{% trans "organization profile" %}{% endblock title %} {% block header_title %}{% trans "organization profile" %}{% endblock header_title %}   {% block content %}     <form action="" method="post">{% csrf_token %}         {% crispy form %}         <input type="submit" value="{% trans 'generate new key' %}" name="_key">         <input type="submit" value="{% trans 'update form' %}" name="_update">     </form> {% endblock content %} 

using _key , '_update' want differentiate between 2 buttons , actions update name , regenerate new apikey.

ohh, have found way around. in post request updating apikey need to:

  • update apikey value in model , save it,
  • redirect request

views.py

class orgprofileview(updateview):     model = organization     template_name = 'orgs/orgprofile.html'     form_class = orgprofileform     url_name = 'profile'      def get_object(self, queryset=none):         org_obj = organization.objects.get(orgname=self.kwargs["orgname"])         return org_obj      def post(self, request, *args, **kwargs):         if '_key' in request.post:             org_obj = organization.objects.get(orgname=self.kwargs["orgname"])             org_obj.apikey = get_apikey()             org_obj.save()             self.object = org_obj             return super(baseupdateview, self).get(request, *args, **kwargs)         else:             self.object = self.get_object()             return super(baseupdateview, self).post(request, *args, **kwargs) 

Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -