예제 #1
0
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', '/'),
        })
예제 #2
0
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"))
예제 #3
0
    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')
예제 #4
0
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', '/'),
        }
    )
예제 #5
0
    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')
예제 #6
0
    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')
예제 #7
0
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', '/'),
        }
    )
예제 #8
0
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', '/'),
        }
    )
예제 #9
0
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', '/'),
        }
    )
예제 #10
0
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', '/'),
        }
    )
예제 #11
0
    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')
예제 #12
0
    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()
예제 #13
0
class DomainAdmin(ObjectPermissionAdmin, ChangedAdmin):
    list_display = (
        "name",
        "sgroup_permissions",
        "suser_permissions",
        "changed_by",
        "changed",
    )
    form = al.modelform_factory(Domain, exclude=("changed",))
    search_fields = ("name",)
예제 #14
0
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'),
        }
    )
예제 #15
0
    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')
예제 #16
0
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", )
예제 #17
0
    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))
예제 #18
0
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__'
예제 #19
0
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'),
        }
    )
예제 #20
0
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', '/'),
    })
예제 #21
0
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
예제 #22
0
class YourModelAdmin(admin.ModelAdmin):
    form = shortcuts.modelform_factory(YourModel, exclude=[])
    fields = (('name', 'relation'), ('name2', 'date_and_time'))
예제 #23
0
class NonAdminAddAnotherModelAdmin(admin.ModelAdmin):
    form = autocomplete_light.modelform_factory(NonAdminAddAnotherModel,
            fields=('name', 'widgets'))
예제 #24
0
class TokenAdmin(TokenAdmin):
    form = al.modelform_factory(Token, fields=("user",))
예제 #25
0
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
예제 #26
0
class DhcpGroupAdmin(ChangedAdmin):
    list_display = ("name", "description", "changed_by", "changed")
    search_fields = ("^name", )
    form = al.modelform_factory(DhcpGroup, exclude=("changed", ))
예제 #27
0
import autocomplete_light.shortcuts as al

from .models import NonAdminAddAnotherModel

NonAdminAddAnotherModelForm = al.modelform_factory(NonAdminAddAnotherModel,
                                                   exclude=[])
예제 #28
0
    def test_modelform_factory(self):
        self.form = autocomplete_light.modelform_factory(self.model_class,
                exclude=[])()

        self.assertExpectedFormField()