def a_star(): tree_root = IntermediaryNode(IntermediaryNode.problem.start_node) open = [tree_root] closed = [] while len(open) > 0: curr_node = open.pop(0) closed.append(curr_node) if curr_node.test_end(): break for node in curr_node.expand(): if not curr_node.already_in_tree(node): node_open = in_list(open, node) if node_open is not None and node_open.f > node.f: open.remove(node_open) open.append(node) node_closed = in_list(closed, node) if node_closed is not None and node_closed.f > node.f: closed.remove(node_closed) open.append(node) if node_closed is None and node_open is None: open.append(node) open = sorted(sorted(open, key=attrgetter('g'), reverse=True), key=attrgetter('f')) print("\n------------------ Concluzie -----------------------") if len(open) == 0: print("Lista open e vida, nu avem drum solutie") else: print("Drum de cost minim: ") print_solution(curr_node)
def test_repr_attrgetter(self): import _operator as operator assert repr(operator.attrgetter("foo")) == "operator.attrgetter('foo')" assert repr(operator.attrgetter( "foo", 'bar')) == ("operator.attrgetter('foo', 'bar')") assert repr(operator.attrgetter("foo.bar")) == ( "operator.attrgetter('foo.bar')") assert repr(operator.attrgetter( "foo", 'bar.baz')) == ("operator.attrgetter('foo', 'bar.baz')")
def test_dotted_attrgetter(self): from _operator import attrgetter class A: pass a = A() a.name = "hello" a.child = A() a.child.name = "world" a.child.foo = "bar" assert attrgetter("child.name")(a) == "world" assert attrgetter("child.name", "child.foo")(a) == ("world", "bar")
def Sort(self): ''' sorts the list by name ''' allDTO = self.getDTO() allDTO = sorted(allDTO, key=attrgetter('name', 'Grade'), reverse=False) return allDTO
def group(self, group): rez = [] for c in self.list: if c.get_group().strip() == group: rez.append(c) rez = sorted(rez, key = attrgetter('name')) return rez
def tournament_selection_func(self, population): """Select a random number of individuals from the population and return the fittest member of them all. """ ##log.info("tournament selection...") members = random.sample(population, self.tournament_size) members.sort(key=attrgetter('fitness'), reverse=self.maximise_fitness) return members[0]
def optimal_points(segments): points = [] segments = sorted(segments, key=attrgetter('end')) max_right = segments[0].end points.append(max_right) i = 1 while i < len(segments): if max_right < segments[i].start: max_right = segments[i].end points.append(max_right) i += 1 return points
def export(self, file): all = BikeRepo.getAll(self) all = sorted(all, key= attrgetter('price')) f = open(file, 'w') for b in all: bf = str(b.get_id() + "|" + b.get_type() + "|" + str(b.get_price())) + "\n" f.write(bf) f.close()
def wykonaj_ture(self): self.__rozmiar_ruchu_inicjatywy = self.__ruch.__len__() self.__iterator_organizmow = 0 self.__ruch.sort(key=attrgetter('_inicjatywa', '_sila'), reverse=True) for self.__iterator_organizmow in range( 0, self.__rozmiar_ruchu_inicjatywy): if (self.__iterator_organizmow < self.__ruch.__len__()) and ( self.__ruch[self.__iterator_organizmow] != None): self.__ruch[self.__iterator_organizmow].akcja() for j in range(0, self.__rozmiar_ruchu_inicjatywy): if (j < self.__ruch.__len__()) and (self.__ruch[j] != None): self.__ruch[j].postarz_organizm() self.rysuj_swiat()
def getOpinions(): r = requests.get(url) soup = BeautifulSoup(r._content) opin = soup.find_all("span") count = 0 temp_opinion = [] temp_preopin = [] temp_lwopin = [] temp_lmopin = [] for cont in opin: if "+" in cont.text or "-" in cont.text or "unch" in cont.text: count = 0 else: if "Buy" in cont.text: if (count == 0): temp_opinion.append(cont.text.split("%")[0]) elif (count == 1): temp_preopin.append(cont.text.split("%")[0]) elif (count == 2): temp_lwopin.append(cont.text.split("%")[0]) elif (count == 3): temp_lmopin.append(cont.text.split("%")[0]) count+=1 elif "Sell" in cont.text: if (count == 0): temp_opinion.append(int("-"+cont.text.split("%")[0])) elif (count == 1): temp_preopin.append(int("-"+cont.text.split("%")[0])) elif (count == 2): temp_lwopin.append(int("-"+cont.text.split("%")[0])) elif (count == 3): temp_lmopin.append(int("-"+cont.text.split("%")[0])) count+=1 elif "Hold" in cont.text: if (count == 0): temp_opinion.append(0) elif (count == 1): temp_preopin.append(0) elif (count == 2): temp_lwopin.append(0) elif (count == 3): temp_lmopin.append(0) count+=1 for i in range(len(CompanyList)): CompanyList[i].setOpinion(temp_opinion[i]) CompanyList[i].setPreopin(temp_preopin[i]) CompanyList[i].setLWopin(temp_lwopin[i]) CompanyList[i].setLMopin(temp_lmopin[i]) CompanyList[i].getScore() CompanyList.sort(key=_operator.attrgetter('score'), reverse=True)
def getOpinions(): r = requests.get(url) soup = BeautifulSoup(r._content) opin = soup.find_all("span") count = 0 temp_opinion = [] temp_preopin = [] temp_lwopin = [] temp_lmopin = [] for cont in opin: if "+" in cont.text or "-" in cont.text or "unch" in cont.text: count = 0 else: if "Buy" in cont.text: if (count == 0): temp_opinion.append(cont.text.split("%")[0]) elif (count == 1): temp_preopin.append(cont.text.split("%")[0]) elif (count == 2): temp_lwopin.append(cont.text.split("%")[0]) elif (count == 3): temp_lmopin.append(cont.text.split("%")[0]) count += 1 elif "Sell" in cont.text: if (count == 0): temp_opinion.append(int("-" + cont.text.split("%")[0])) elif (count == 1): temp_preopin.append(int("-" + cont.text.split("%")[0])) elif (count == 2): temp_lwopin.append(int("-" + cont.text.split("%")[0])) elif (count == 3): temp_lmopin.append(int("-" + cont.text.split("%")[0])) count += 1 elif "Hold" in cont.text: if (count == 0): temp_opinion.append(0) elif (count == 1): temp_preopin.append(0) elif (count == 2): temp_lwopin.append(0) elif (count == 3): temp_lmopin.append(0) count += 1 for i in range(len(CompanyList)): CompanyList[i].setOpinion(temp_opinion[i]) CompanyList[i].setPreopin(temp_preopin[i]) CompanyList[i].setLWopin(temp_lwopin[i]) CompanyList[i].setLMopin(temp_lmopin[i]) CompanyList[i].getScore() CompanyList.sort(key=_operator.attrgetter('score'), reverse=True)
def a_star(): rad_arbore = NodParcurgere(NodParcurgere.problema.nod_start) open = [rad_arbore] # open va contine elemente de tip NodParcurgere closed = [] # closed va contine elemente de tip NodParcurgere while len(open) > 0: print(str_info_noduri(open)) # afisam lista open nod_curent = open.pop(0) closed.append(nod_curent) if nod_curent.test_scop(): break expandare = [ NodParcurgere(nod_graf=nod, parinte=nod_curent, g=nod_curent.g + cost) for (nod, cost) in nod_curent.expandeaza() ] for s in expandare: if not nod_curent.contine_in_drum(s): node_open = in_lista(open, s) if node_open is not None and node_open.f > s.f: open.remove(node_open) open.append(s) open = sorted(sorted(open, key=attrgetter('g'), reverse=True), key=attrgetter('f')) print("\n------------------ Concluzie -----------------------") if len(open) == 0: print( "Lista open e vida, nu avem drum de la nodul start la nodul scop") else: print("Drum de cost minim: " + str_info_noduri(nod_curent.drum_arbore()))
def dynSolve (p): for row in range(p.height -2 ,-1,-1): #print(str(row) + ":") for i in range(0,len(p.nums[row])): p.nums[row][i].minimumPathValue += min(p.nums[row+1][i].minimumPathValue,p.nums[row+1][i+1].minimumPathValue) print("after finding path values:" + str(p)) i = 0 for h in range(0,len(p.nums)-1): row = p.nums[h+1] i = row.index(min(row[i],row[i+1],key=attrgetter('minimumPathValue'))) print (str(i))
def dynSolve(p): for row in range(p.height - 2, -1, -1): #print(str(row) + ":") for i in range(0, len(p.nums[row])): p.nums[row][i].minimumPathValue += min( p.nums[row + 1][i].minimumPathValue, p.nums[row + 1][i + 1].minimumPathValue) print("after finding path values:" + str(p)) i = 0 for h in range(0, len(p.nums) - 1): row = p.nums[h + 1] i = row.index( min(row[i], row[i + 1], key=attrgetter('minimumPathValue'))) print(str(i))
def _top_hits(result): ''' Return the top hit docs in the aggregation 'idxs'. ''' top_hits = result.aggs['idxs'].get_docs_in_buckets(obj_document=ElasticSettings.getattr('DOCUMENT_FACTORY')) idx_names = list(top_hits.keys()) for idx in idx_names: idx_key = ElasticSettings.get_idx_key_by_name(idx) if idx_key.lower() != idx: if idx_key.lower() == 'marker': top_hits[idx]['doc_count'] = _collapse_marker_docs(top_hits[idx]['docs']) elif idx_key.lower() == 'region': top_hits[idx]['doc_count'] = _collapse_region_docs(top_hits[idx]['docs']) elif idx_key.lower() == 'publication': # sort by date top_hits[idx]['docs'].sort(key=attrgetter('date'), reverse=True) top_hits[idx_key.lower()] = top_hits[idx] del top_hits[idx] return top_hits
def test_getter_multiple_gest(self): import _operator as operator class A(object): pass a = A() a.x = 'X' a.y = 'Y' a.z = 'Z' assert operator.attrgetter('x', 'z', 'y')(a) == ('X', 'Z', 'Y') e = raises(TypeError, operator.attrgetter, ('x', (), 'y')) assert str(e.value) == "attribute name must be a string, not 'tuple'" data = list(map(str, range(20))) assert operator.itemgetter(2, 10, 5)(data) == ('2', '10', '5') raises(TypeError, operator.itemgetter(2, 'x', 5), data)
def recommended_event(request): context = {} rec_list = [] rec_id = [] events = Event.objects.all() rec_event = event_recommender(request.user.id) for x in rec_event: rec_list.append(filtering(int(x.__dict__['id']),float(x.__dict__['similarity']))) rec_list2 = sorted(rec_list, key=attrgetter('similarity'), reverse=True) for x in rec_list2: print("ID: " + str(x.id) +" Similarity :"+ str(x.similarity)) rec_id.append(x.id) joined_event = request.user.event_set.all() context = {'rec_id':rec_id,'events':events,'joined_event':joined_event} return render(request, "event/home.html", context)
def best_modulo(self, *attrs): """ Returns: best model according to validation error """ from .models import TrainConfig pool_over = [ CoreConfig(), ReadoutConfig(), Seed(), ShifterConfig(), ModulatorConfig(), TrainConfig() ] h = self.heading.primary_key for e in chain(*map(attrgetter('heading.primary_key'), pool_over), attrs): if e not in attrs: h.remove(e) return self * dj.U(*h).aggr( self.proj('val_corr'), max_val='max(val_corr)') & 'val_corr = max_val'
def rank_population(self): """Sort the population by fitness according to the order defined by maximise_fitness and choose the fittest individuals if the current population size exceeds the maximum population size """ #log.info("rank_population...") self.current_generation.sort(key=attrgetter('fitness'), reverse=self.maximise_fitness) log.info(f"Current population size: {len(self.current_generation)}") if not self._duplicate_individuals: self._filter_out_duplicates_from_curr_gen() if self._constant_population_size and len( self.current_generation) < self.population_size: self._fill_curr_gen_with_random_individuals() assert len( self.current_generation ) == self.population_size, f"num individuals in current gen = {len(self.current_generation)} != {self.population_size} = population size do not match" else: self.current_generation = self.current_generation[:self. population_size] log.info(f"Current population size: {len(self.current_generation)}")
def detect_outliers_subpopulation_lattice( filename, output='Result', output_path='', full_output=False, delimiter=',', quotechar='|', limit=25000, outlier_method='Outlier_LOF', #LOF for local outlier factor https://de.wikipedia.org/wiki/Local_Outlier_Factor min_population_size=30, threshold=3, threshold_avg=3, num_outliers=25, # Method specific parameters: k=5): '''Read input and create list of items.''' print('Read CSV ...') data = read_input_csv(filename, delimiter, quotechar, limit) filename_with_ID = filename items = data[0] features = data[1] #Sort items for LOF calculation. items.sort(key=attrgetter('target')) print(len(items), "items have been created.") """Create lattice.""" lattice = Lattice(features, items) '''Generate subpopulations.''' print("Generate subpopulations...") lattice.generate_subpopulations(min_population_size=min_population_size) print(lattice.num_vertices(), "subpopulations have been created.") '''Apply outlier detection to the subpopulation lattice.''' print("Detect outliers...") lattice.detect_outliers(outlier_method, k) '''InputOutput scores.''' print("Write CSV ...") if full_output: print('full output ', output_path, output) write_csv(lattice, os.path.join(output_path, output + '_Scores.csv')) filename, dic = write_outlier( lattice, os.path.join(output_path, output + '_Outlier.csv'), threshold) write_outlier(lattice, os.path.join(output_path, output + '_Outlier_Avg.csv'), threshold_avg, 'avg_score') # return dumps({'filename': filename}) print(dic) return dumps({"result": dic}) else: output_file = output + '_top' + num_outliers.__str__() + '.csv' filename, dic = write_top_outlier(lattice, output_file, num_outliers, server_data_path=output_path) # return dumps({'filename': filename}) print(dic) return dumps({"result": dic, "filename": filename_with_ID}) return 0
class A(object): getx = operator.attrgetter('x') get3 = operator.itemgetter(3) callx = operator.methodcaller("append", "x")
def test_attrgetter_type(self): from _operator import attrgetter assert type(attrgetter("child.name")) is attrgetter
from _operator import attrgetter class InventoryLine: """Class that represent an Inventory Line of sales""" def __init__(self, product, price, quantity): """Constructor of the Inventory""" self.product = product self.price = price self.quantity = quantity def __repr__(self): """print our attribute nicely""" return "<Inventory Line {} ({}/{})>".format(self.product, self.price, self.quantity) inventory = [ InventoryLine("pomme rouge", 1.2, 19), InventoryLine("orange", 1.4, 24), InventoryLine("banane", 0.9, 21), InventoryLine("poire", 1.2, 24), ] inventory.sort(key=attrgetter("quantity"), reverse=True) print(sorted(inventory, key=attrgetter("price")))
def getSightings(self,assumedLatitude='0d0.0',assumedLongitude='0d0.0'): if (not isinstance(assumedLatitude, str) or not isinstance(assumedLongitude, str)): raise ValueError('Fix.getSightings: both assumedLatitude and assumedLongitude have to be str') if assumedLatitude[0]=='S' or assumedLatitude[0]=='N': checkLatitude=assumedLatitude[1:] if not self.anglecheck(checkLatitude): raise ValueError('Fix.getSightings: not valid Latitude') if assumedLatitude[0]=='S': assumedLatitude='-'+checkLatitude else: assumedLatitude=checkLatitude else: if not assumedLatitude=='0d0.0': raise ValueError('Fix.getSightings: not valid Latitude') if not self.angleNewcheck(assumedLongitude): raise ValueError('Fix.getSightings: not valid Longitude') if self.sightingFile == '': raise ValueError('Fix.getSightings: no sighting file in instance') if self.ariesFile == '': raise ValueError('Fix.getSightings: no aries file in instance') if self.starFile == '': raise ValueError('Fix.getSightings: no aries file in instance') try: dom=xml.parse(self.sightingFile) except: raise ValueError('Fix.getSightings: parse xml file failed') try: starFile=open(self.starFile,'r') except: raise ValueError('Fix.getSightings: starfile can not be found in directory') try: ariesFile=open(self.ariesFile,'r') except: raise ValueError('Fix.getSightings: ariesfile can not be found in directory') sightings=dom.getElementsByTagName('sighting') for sight in sightings: OneSighting = Sighting() #getting information from xml file body = sight.getElementsByTagName('body') date = sight.getElementsByTagName('date') time = sight.getElementsByTagName('time') obv = sight.getElementsByTagName('observation') height = sight.getElementsByTagName('height') temt = sight.getElementsByTagName('temperature') pres = sight.getElementsByTagName('pressure') horz = sight.getElementsByTagName('horizon') #check mandatory tag format and pass data in to sighting instances if len(body)==0 or len(date)==0 or len(time)==0 or len(obv)==0: self.errorNumber+=1 continue bodydata = self.getText(body[0].childNodes) if len(bodydata) == 0: self.errorNumber+=1 continue OneSighting.setBody(bodydata) datedata = self.getText(date[0].childNodes) pattern=re.compile(r'(^\d\d\d\d-\d\d-\d\d$)') ifmatch = pattern.match(datedata) if not ifmatch: self.errorNumber+=1 continue if not self.datecheck(datedata): self.errorNumber+=1 continue OneSighting.setDate(datedata) timedata = self.getText(time[0].childNodes) pattern=re.compile(r'(^\d\d:\d\d:\d\d$)') ifmatch = pattern.match(timedata) if not ifmatch: self.errorNumber+=1 continue if not self.timecheck(timedata): self.errorNumber+=1 continue OneSighting.setTime(timedata) obvdata = self.getText(obv[0].childNodes) angle=Angle.Angle() anglecheck=Angle.Angle() if not self.anglecheck(obvdata): self.errorNumber+=1 continue obvdata=angle.setDegreesAndMinutes(obvdata) checkdata=anglecheck.setDegreesAndMinutes('0d0.1') if obvdata < checkdata: self.errorNumber+=1 continue obvdatarad=obvdata*math.pi/180 if not (len(height) == 0 or self.getText(height[0].childNodes)==''): heightdata=self.getText(height[0].childNodes) try: heightdata=float(heightdata) except: self.errorNumber+=1 continue if heightdata < 0: self.errorNumber+=1 continue OneSighting.setheight(heightdata) if not (len(temt) == 0 or self.getText(temt[0].childNodes)==''): temtdata = self.getText(temt[0].childNodes) temtdata = int(temtdata) if temtdata < -20 or temtdata > 120: self.errorNumber+=1 continue OneSighting.setTemt(temtdata) if not (len(pres) == 0 or self.getText(pres[0].childNodes)==''): presdata = self.getText(pres[0].childNodes) try: presdata = int(presdata) except: self.errorNumber+=1 continue if presdata < 100 or presdata > 1100: self.errorNumber+=1 continue OneSighting.setPres(presdata) if not (len(horz) == 0 or self.getText(horz[0].childNodes)==''): horzdata = self.getText(horz[0].childNodes) if not (horzdata == 'Artificial' or horzdata == 'artificial' or horzdata == 'Natural' or horzdata == 'natural'): self.errorNumber+=1 continue OneSighting.setHorz(horzdata) #Calculation of adjusted altitude if OneSighting.horz == 'Artificial' or OneSighting.horz == 'artificial': dip = 0 else: dip = (-0.97*math.sqrt(OneSighting.height))/60 refc=((-0.00452*OneSighting.pres)/(273+(OneSighting.temt-32)*5/9))/math.tan(obvdatarad) adjAlt=obvdata+dip+ refc angle.setDegrees(adjAlt) adjAlt=angle.getString() OneSighting.setAdjAtl(adjAlt) self.sightingList.append(OneSighting) file=open(self.name,'a') self.sightingList.sort(key=attrgetter('date','time','body')) #Start calculating latitude and longitude self.getLatitudeAndSHA(starFile) self.getGHA(ariesFile) self.getLongitude() self.getLHA(assumedLongitude) self.getCorrectAltitude(assumedLatitude) self.getDistanceAdj() self.getAzimuthAdj(assumedLatitude) for sighting in self.sightingList: if sighting.valid==True: file.write(self.gettime()+ '\t' + sighting.body + '\t' + sighting.date + '\t' + sighting.time + '\t' + sighting.adjAtl + '\t' + sighting.latitude + '\t' +sighting.longitude + '\t'+ assumedLatitude + '\t'+ assumedLongitude + '\t' + sighting.azi + '\t' + sighting.disAl + '\n') approxLa=self.getAppLa(assumedLatitude) approxLo=self.getAppLo(assumedLongitude) if approxLa[0]=='-': approxLa='S'+approxLa[1:] else: approxLa='N'+approxLa file.write(self.gettime() + '\t' + 'Sighting errors:' + '\t' + str(self.errorNumber) + '\n') file.write(self.gettime() + '\t' + 'Approximate latitude:' + '\t' + approxLa+ '\t' + 'Approximate Longitude:' + '\t' + approxLo + '\n') file.close() approximateLatitude = approxLa approximateLongitude = approxLo return (approximateLatitude,approximateLongitude)
# -*-coding:Latin-1 -* from _operator import attrgetter class Students: """Class that Describe Students""" def __init__(self, name, age, avg): """Constructor For the student and initialize all arguments""" self.name = name self.age = age self.avg = avg def __repr__(self): """print information about students""" return "<Student {} (age={}, avg={}>".format(self.name, self.age, self.avg) students = [ Students("Clément", 14, 16), Students("Charles", 12, 15), Students("Oriane", 14, 18), Students("Thomas", 11, 12), Students("Damien", 12, 15), ] print(sorted(students, key=attrgetter("age", "avg", "name"), reverse=True))
from _operator import attrgetter # 内置的 sorted() 函数有一个关键字参数 key ,可以传入一个 callable 对象给它, # 这个 callable 对象对每个传入的对象返回一个值,这个值会被 sorted 用来排序这些对象。 # 比如,如果你在应用程序里面有一个 User 实例序列,并且你希望通过他们的 user_id 属性进行排序, # 你可以提供一个以 User 实例作为输入并输出对应 user_id值的 callable 对象。比如: class User: def __init__(self, user_id): self.user_id = user_id def __repr__(self): return 'User({})'.format(self.user_id) users = [User(23), User(3), User(99)] print(users) print(sorted(users, key=lambda u: u.user_id)) # 另外一种方式是使用 operator.attrgetter() 来代替 lambda 函数: print(sorted(users, key=attrgetter('user_id'))) # 选择使用 lambda 函数或者是 attrgetter() 可能取决于个人喜好。 # 但是,attrgetter() 函数通常会运行的快点,并且还能同时允许多个字段进行比较。 # 这个跟 operator.itemgetter() 函数作用于字典类型很类似(参考 1.13 小节)。 # 例如,如果 User 实例还有一个 first_name 和 last_name 属性,那么可以向下面这样排序: # by_name = sorted(users, key=attrgetter('last_name', 'first_name')) # 同样需要注意的是,这一小节用到的技术同样适用于像 min() 和 max() 之类的函数。比如: print(min(users, key=attrgetter('user_id'))) print(max(users, key=attrgetter('user_id')))
def __iter__(self): yield from map(attrgetter('element'), self._elements)
def event_management(request, id): context = {} rec_list = [] rec_id = [] events = Event.objects.get(pk=id) activity = Activity.objects.filter(event = events.id) logistic = Logistic.objects.filter(event = events.id) users = User.objects.all() rec = eventProfile(id) #--------Matching Technique class Filtering-- for x in rec: rec_list.append(filtering(int(x.__dict__['id']),float(x.__dict__['similarity']))) rec_list2 = sorted(rec_list, key=attrgetter('similarity'), reverse=True) for x in rec_list2: print("ID: " + str(x.id) +" Similarity :"+ str(x.similarity)) rec_id.append(x.id) #--------add activity--------- activity_form = add_activity(request.POST) if 'add_activity' in request.POST: if activity_form.is_valid(): instance = activity_form.save(commit=False) instance.event = events instance.save() messages.success(request, 'Activity successfully Create!') return redirect('detail', id=id) else: context = {'events':events, 'activity':activity, 'rec_id':rec_id, 'users':users,'logistic':logistic,'activity_form':activity_form} return redirect('detail',id=id) #--------add logistic--------------------- logistic_form = add_logistic(request.POST) if 'add_logistic' in request.POST: if logistic_form.is_valid(): instance = logistic_form.save(commit=False) instance.event = events instance.save() logistic_form.save_m2m() messages.success(request, 'Logistic successfully Added!') return redirect('detail', id=id) else: context = {'events':events, 'activity':activity, 'rec_id':rec_id, 'users':users,'logistic':logistic,'activity_form':activity_form,'logistic_form':logistic_form} return redirect('detail',id=id) #--------Join Event------------------ if 'join-event' in request.POST: events = Event.objects.get(pk=id) Event.join(request.user,events) messages.success(request, 'You are successfully Added to the Volunteers List!') context = {'events':events, 'activity':activity, 'rec_id':rec_id, 'users':users,'logistic':logistic,'activity_form':activity_form,'logistic_form':logistic_form} return redirect('detail',id=id) #--------Unjoin Event---------------------- if 'unjoin-event' in request.POST: events = Event.objects.get(pk=id) Event.unjoin(request.user,events) messages.success(request, 'You are successfully Remove from the Volunteers List!') context = {'events':events, 'activity':activity, 'rec_id':rec_id, 'users':users,'logistic':logistic,'activity_form':activity_form,'logistic_form':logistic_form} return redirect('detail',id=id) #--------Edit event--------------------- event_edit = EditEvent(request.POST or None ,instance=events) if 'edit-event' in request.POST: if event_edit.is_valid(): event_edit.save() messages.success(request, 'Event is successfully Updated!') return redirect('detail', id=id) else: context = {'events':events, 'activity':activity, 'rec_id':rec_id, 'users':users,'logistic':logistic,'activity_form':activity_form,'event_edit':event_edit} return redirect('detail',id=id) #--------Delete event------------ if 'delete-event' in request.POST: events.delete() messages.success(request, 'Event is successfully Deleted!') return redirect('event_view') current_event = None if request.user.is_authenticated: current_event = request.user.event_set.filter(pk=id) context = {'current_event':current_event,'events':events, 'activity':activity, 'rec_id':rec_id, 'users':users,'logistic':logistic,'activity_form':activity_form,'logistic_form':logistic_form,'event_edit':event_edit} return render(request, "event/event_detail.html", context)