def position_edit(request, person_id=None, position_id=None): """position edit""" person = get_object_or_404(Person, pk=person_id) # ain7member = get_object_or_404(AIn7Member, person=person) position = None if position_id: position = get_object_or_404(Position, pk=position_id) #PositionForm = modelform_factory( PositionForm = autocomplete_light.modelform_factory( Position, exclude=('ain7member', ), ) form = PositionForm(request.POST or None, instance=position) if request.method == 'POST' and form.is_valid(): pos = form.save(commit=False) pos.ain7member = person pos.save() messages.success(request, _('Modifications have been successfully saved.')) print('je suis la') return redirect('annuaire-edit', person_id) return render( request, 'annuaire/edit_form.html', { 'form': form, 'person': person, 'action_title': _("Position edit"), 'back': request.META.get('HTTP_REFERER', '/'), })
class GuestTicketAdmin(admin.ModelAdmin): list_display = ("ticket", "user", "starts", "ends") list_filter = ("starts", "ends") search_fields = ("user__username", "ticket") form = al.modelform_factory(GuestTicket, fields=("user", "ticket", "starts", "ends", "description"))
def test_modelform_factory_fields_relation(self): self.form = autocomplete_light.modelform_factory(self.model_class, fields=['relation'])() self.assertExpectedFormField() self.assertNotInForm('name') self.assertNotInForm('noise')
def ain7member_edit(request, user_id): person = get_object_or_404(Person, user=user_id) ain7member = get_object_or_404(AIn7Member, person=person) AIn7MemberForm = autocomplete_light.modelform_factory( AIn7Member, exclude=('person',) ) form = AIn7MemberForm( request.POST or None, request.FILES or None, instance=ain7member ) if request.method == 'POST' and form.is_valid(): form.save() messages.success(request, _('Modifications have been\ successfully saved.')) return redirect('annuaire-edit', user_id) return render(request, 'annuaire/edit_form.html', { 'form': form, 'person': person, 'action_title': _("Modification of personal data"), 'back': request.META.get('HTTP_REFERER', '/'), } )
def test_modelform_factory_autocomplete_exclude_relation(self): self.form = autocomplete_light.modelform_factory(self.model_class, autocomplete_exclude=['relation'], exclude=[])() self.assertNotInForm('relation') self.assertInForm('name') self.assertIsAutocomplete('noise')
def test_modelform_factory_exclude_name(self): self.form = autocomplete_light.modelform_factory(self.model_class, exclude=['name'])() self.assertNotInForm('name') self.assertExpectedFormField() self.assertIsAutocomplete('noise')
def edit_council_role(request, role_id=None): """edit council role""" group_role = None if role_id: group_role = get_object_or_404(GroupLeader, id=role_id) CouncilRoleForm = autocomplete_light.modelform_factory( GroupLeader, exclude=('grouphead',) ) form = CouncilRoleForm(request.POST or None, instance=group_role) if request.method == 'POST' and form.is_valid(): council_role = form.save(commit=False) council_role.grouphead = GroupHead.objects.get(group__slug='ain7') council_role.save() return redirect('council-details') return render(request, 'association/council_edit.html', { 'count_members': count_members(), 'form': form, 'back': request.META.get('HTTP_REFERER', '/'), } )
def member_edit(request, slug, member_id=None): """add a new member to the role""" group = get_object_or_404(Group, slug=slug) member = None if member_id: member = get_object_or_404(Member, pk=member_id) MemberForm = autocomplete_light.modelform_factory( Member, exclude=('group', 'start_date', 'end_date', 'expiration_date',), ) form = MemberForm(request.POST or None, instance=member) if request.method == 'POST' and form.is_valid(): member = form.save(commit=False) member.group = group member.save() messages.success(request, _('User added to group')) return redirect('group-details', group.slug) return render(request, 'groups/edit.html', { 'form': form, 'group': group, 'back': request.META.get('HTTP_REFERER', '/'), } )
def role_edit(request, slug, role_id=None): """edit group head""" group = get_object_or_404(Group, slug=slug) is_member = request.user.is_authenticated()\ and group.has_for_member(request.user.person) role = None if role_id: role = get_object_or_404(GroupLeader, id=role_id) RoleForm = autocomplete_light.modelform_factory( GroupLeader, exclude=('grouphead',) ) form = RoleForm(request.POST or None, instance=role) if request.method == 'POST' and form.is_valid(): role = form.save(commit=False) role.grouphead = GroupHead.objects.get(group__slug=group.slug) role.save() return redirect('group-details', group.slug) return render(request, 'groups/edit.html', { 'group': group, 'is_member': is_member, 'form': form, 'back': request.META.get('HTTP_REFERER', '/'), } )
def position_edit(request, user_id=None, position_id=None): """position edit""" person = get_object_or_404(Person, user=user_id) ain7member = get_object_or_404(AIn7Member, person=person) position = None if position_id: position = get_object_or_404(Position, pk=position_id) PositionForm = autocomplete_light.modelform_factory( Position, exclude=('ain7member',), ) form = PositionForm(request.POST or None, instance=position) if request.method == 'POST' and form.is_valid(): pos = form.save(commit=False) pos.ain7member = ain7member pos.save() messages.success( request, _('Modifications have been successfully saved.') ) return redirect('annuaire-edit', user_id) return render(request, 'annuaire/edit_form.html', { 'form': form, 'action_title': _("Position edit"), 'back': request.META.get('HTTP_REFERER', '/'), } )
def test_modelform_factory_fields_name(self): self.form = autocomplete_light.modelform_factory(self.model_class, fields=['name'])() self.assertInForm('name') self.assertNotInForm('relation') self.assertNotInForm('noise')
def test_modelform_factory_does_not_warn(self): # fix for #257 with mock.patch('warnings.warn') as warn: self.form = autocomplete_light.modelform_factory(self.model_class, fields='__all__')() self.assertEqual(warn.call_count, 0) self.assertExpectedFormField()
class DomainAdmin(ObjectPermissionAdmin, ChangedAdmin): list_display = ( "name", "sgroup_permissions", "suser_permissions", "changed_by", "changed", ) form = al.modelform_factory(Domain, exclude=("changed",)) search_fields = ("name",)
def office_edit(request, organization_id, office_id=None): """office edit""" organization = get_object_or_404(Organization, id=organization_id) office = None if office_id: office = get_object_or_404( Office, id=office_id, organization=organization, ) OfficeForm = autocomplete_light.modelform_factory( Office, exclude=('old_id','is_valid','is_a_proposal', 'modification_of', 'modification_date', 'organization'), ) form = OfficeForm(request.POST or None, instance=office) if request.method == 'POST' and form.is_valid(): old_office = None user_groups = request.user.person.groups.values_list('group__name', flat=True) if ( 'ain7-secretariat' not in user_groups and 'ain7-admin' not in user_groups and office_id ): office.id = None office.is_valid = False office.save() old_office = office office = get_object_or_404(Office, pk=office_id) form = OfficeForm(request.POST.copy(), instance=office) office = form.save(commit=False) office.organization = organization office.save() if old_office: office.modification_of = old_office office.modification_date = datetime.datetime.now() office.save() messages.success(request, message=_('Office has been modified.')) return redirect(office.organization) return render(request, 'organizations/office_edit.html', { 'form': form, 'organization': organization, 'office': office, 'title': _('Modify an office'), } )
def test_modelform_factory_autocomplete_fields_relation(self): if VERSION < (1, 7): fields = None else: fields = '__all__' self.form = autocomplete_light.modelform_factory(self.model_class, autocomplete_fields=['relation'], fields=fields)() self.assertExpectedFormField() self.assertNotIsAutocomplete('noise') self.assertInForm('name')
class InfoPageAdmin(StricterSlugFieldMixin, admin.ModelAdmin): search_fields = search_fields_to_use list_display = ['slug', 'title', 'kind', 'publication_date'] list_filter = ['kind', 'categories', 'tags'] date_hierarchy = 'publication_date' ordering = ('-publication_date', 'title') form = autocomplete_light.modelform_factory(models.InfoPage, exclude=[]) fields = fields_to_use prepopulated_fields = {'slug': ['title']} class Media: js = ("info/js/admin.js", )
def test_modelform_factory_autocomplete_names(self): SpecialAutocomplete = self.get_new_autocomplete_class() autocomplete_light.registry.register(SpecialAutocomplete) ModelForm = autocomplete_light.modelform_factory(self.model_class, autocomplete_names={'relation': 'SpecialAutocomplete'}, exclude=[]) self.form = ModelForm() self.assertInForm('name') self.assertIsAutocomplete('relation') self.assertIsAutocomplete('noise') self.assertTrue(issubclass(self.form.fields['relation'].autocomplete, SpecialAutocomplete))
class VoyageAdmin(admin.ModelAdmin): """ Admin panel for Voyage class. It contains inlines elements and form for autocompleting as typing. """ inlines = (VoyageCaptainConnectionInline, VoyageShipInline, VoyageShipOwnerInline, VoyageOutcomeInline, VoyageItineraryInline, VoyageDatesInline, VoyageCrewInline, VoyageSlavesNumbersInline, VoyageSourcesConnectionInline) form = autocomplete_light.modelform_factory(Voyage, fields='__all__') list_display = ['voyage_id'] list_display_links = ['voyage_id'] ordering = ['-voyage_in_cd_rom', 'voyage_groupings', 'voyage_id'] search_fields = ['voyage_id'] exclude = ('voyage_ship', 'voyage_itinerary', 'voyage_dates', 'voyage_crew', 'voyage_slaves_numbers') class Meta: fields = '__all__'
def organization_edit(request, organization_id=None): """organization edit data""" org = None if organization_id: org = get_object_or_404(Organization, pk=organization_id) OrganizationForm = autocomplete_light.modelform_factory( Organization, exclude=('modification_of', 'modification_date', 'is_valid') ) form = OrganizationForm(request.POST or None, instance=org) if request.method == 'POST' and form.is_valid(): old_org = None user_groups = request.user.person.groups.values_list('group__name', flat=True) if 'ain7-secretariat' not in user_groups and \ 'ain7-admin' not in user_groups and organization_id: org.id = None org.is_valid = False org.save() old_org = org org = get_object_or_404(Organization, pk=organization_id) form = OrganizationForm(request.POST.copy(), instance=org) org = form.save() if old_org: org.modification_of = old_org org.modification_date = datetime.datetime.now() org.save() return redirect(org) return render(request, 'organizations/organization_edit.html', { 'form': form, 'organization': org, 'title': _('Organization modification'), } )
def job_edit(request, job_id=None): """job edit""" job = None if job_id: job = get_object_or_404(JobOffer, pk=job_id) JobOfferForm = autocomplete_light.modelform_factory( JobOffer, exclude=('checked_by_secretariat', )) form = JobOfferForm(request.POST or None, instance=job) if request.method == 'POST' and form.is_valid(): job = form.save() messages.success(request, _('Job offer successfully modified.')) return redirect('job-details', job.id) return render(request, 'emploi/job_edit.html', { 'form': form, 'job': job, 'back': request.META.get('HTTP_REFERER', '/'), })
class DnsRecordAdmin(ChangedAdmin): list_display = ( "name", "dns_type", "dns_view", "ttl", "priority", "text_content", "ip_content", "edit_link", ) list_filter = ("dns_type", "dns_view", "priority", "domain") form = al.modelform_factory(DnsRecord, exclude=("changed",)) list_editable = ("name", "dns_type", "text_content") list_display_links = ("edit_link",) # list_select_related = True search_fields = ("name", "domain__name", "text_content") def lookup_allowed(self, lookup, value): if "address__host__mac" in lookup: return True return super(DnsRecordAdmin, self).lookup_allowed(lookup, value) def get_queryset(self, request): qs = super(DnsRecordAdmin, self).get_queryset(request) qs = qs.select_related("ip_content", "dns_type") return qs def ip_content(self, obj): return obj.address.address def edit_link(self, obj): return '<a href="%s">Edit</a>' % obj.pk edit_link.short_description = "Edit" edit_link.allow_tags = True
class YourModelAdmin(admin.ModelAdmin): form = shortcuts.modelform_factory(YourModel, exclude=[]) fields = (('name', 'relation'), ('name2', 'date_and_time'))
class NonAdminAddAnotherModelAdmin(admin.ModelAdmin): form = autocomplete_light.modelform_factory(NonAdminAddAnotherModel, fields=('name', 'widgets'))
class TokenAdmin(TokenAdmin): form = al.modelform_factory(Token, fields=("user",))
class NetworkAdmin(ChangedAdmin): list_display = ( "nice_network", "name", "description", "gateway", "changed_by", "changed", ) list_filter = (("tags__name", custom_titled_filter("Tags")), "shared_network__name") form = al.modelform_factory(Network, exclude=("changed,")) search_fields = ("^network", "^name", "^shared_network__name") actions = ["tag_network", "resize_network", "release_abandoned_leases"] def get_actions(self, request): # Disable delete actions = super(NetworkAdmin, self).get_actions(request) del actions["delete_selected"] return actions def nice_network(self, obj): url = str(obj.network).replace("/", "_2F") return '<a href="./%s/">%s</a>' % (url, obj.network) nice_network.short_description = "Network" nice_network.allow_tags = True def get_urls(self): urls = super(NetworkAdmin, self).get_urls() net_urls = [ url(r"^tag/$", self.tag_network_view), url(r"^resize/$", self.resize_network_view), ] return net_urls + urls def tag_network_view(self, request): form = NetworkTagForm(request.POST or None) if form.is_valid(): ids = request.POST.get("ids").strip().split(",") networks = Network.objects.filter(pk__in=ids) for network in networks: network.tags.add(*form.cleaned_data["tags"]) return redirect("../") return render(request, "admin/actions/tag_network.html", {"form": form}) def resize_network_view(self, request): ids = request.GET.get("ids") if ids: ids = ids.strip().split(",") if len(ids) > 1: network_error = True network = None else: network_error = False network = ids[0] form = NetworkReziseForm(request.POST or None, initial={"network": network}) if form.is_valid(): # Update primary key Network.objects.filter(network=network).update( network=form.cleaned_data["network"]) new_network = Network.objects.filter( network=form.cleaned_data["network"]).first() addresses = [] existing_addresses = [ address.address for address in Address.objects.filter( address__net_contained_or_equal=new_network) ] for address in new_network.network: if address not in existing_addresses: reserved = False if address in ( new_network.gateway, new_network.network[0], new_network.network[-1], ): reserved = True pool = (DefaultPool.objects.get_pool_default(address) if not reserved else None) addresses.append( # TODO: Need to set pool eventually. Address( address=address, network=new_network, reserved=reserved, pool=pool, changed_by=request.user, )) if addresses: Address.objects.bulk_create(addresses) messages.success( request, "Network: %s was successfully increased." % new_network.network) return redirect("../") return render( request, "admin/actions/resize_network.html", { "form": form, "network_error": network_error }, ) def tag_network(self, request, queryset): selected = request.POST.getlist(admin.ACTION_CHECKBOX_NAME) ct = ContentType.objects.get_for_model(queryset.model) return redirect("tag/?ct=%s&ids=%s" % (ct.pk, ",".join(selected))) def resize_network(self, request, queryset): selected = request.POST.getlist(admin.ACTION_CHECKBOX_NAME) ct = ContentType.objects.get_for_model(queryset.model) return redirect("resize/?ct=%s&ids=%s" % (ct.pk, ",".join(selected))) def release_abandoned_leases(self, request, queryset): for network in queryset: Lease.objects.filter( address__address__net_contained_or_equal=network.network, abandoned=True).update(abandoned=False, host="000000000000") def save_model(self, request, obj, form, change): super(NetworkAdmin, self).save_model(request, obj, form, change) if not change: addresses = [] existing_addresses = [ address.address for address in Address.objects.filter( address__net_contained_or_equal=obj) ] if existing_addresses: raise ValidationError( "Addresses already exist! Please remove or reassign. %s" % ",".join(str(e) for e in existing_addresses)) for address in obj.network: reserved = False if address in (obj.gateway, obj.network[0], obj.network[-1]): reserved = True pool = (DefaultPool.objects.get_pool_default(address) if not reserved else None) addresses.append( # TODO: Need to set pool eventually. Address( address=address, network=obj, reserved=reserved, pool=pool, changed_by=request.user, )) if addresses: Address.objects.bulk_create(addresses) def get_search_results(self, request, queryset, search_term): queryset, use_distinct = super(NetworkAdmin, self).get_search_results( request, queryset, search_term) queryset = queryset | Network.searcher.search(search_term) return queryset, use_distinct
class DhcpGroupAdmin(ChangedAdmin): list_display = ("name", "description", "changed_by", "changed") search_fields = ("^name", ) form = al.modelform_factory(DhcpGroup, exclude=("changed", ))
import autocomplete_light.shortcuts as al from .models import NonAdminAddAnotherModel NonAdminAddAnotherModelForm = al.modelform_factory(NonAdminAddAnotherModel, exclude=[])
def test_modelform_factory(self): self.form = autocomplete_light.modelform_factory(self.model_class, exclude=[])() self.assertExpectedFormField()