IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

Admin - Filter champ


Sujet :

Django Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 159
    Points : 52
    Points
    52
    Par défaut Admin - Filter champ
    Bonjour, je rencontre un soucis pour la modification du formulaire de modification (et de création) dans la page admin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    from django.db import models
    from django.conf import settings
    from django.utils.translation import ugettext_lazy as _
    from myUser.models import User
     
    class Customer(models.Model):
        fidelite = models.IntegerField(default=0)
        inscription = models.DateField(_("Date"), auto_now_add=True)
        newsletter = models.BooleanField(default=False)
        myUser = models.ForeignKey(
            settings.AUTH_USER_MODEL,
            on_delete=models.CASCADE,
            limit_choices_to={'is_staff': False},
        )
        customerSponsor = models.ForeignKey(
            'self',
            on_delete=models.CASCADE,
            null=True,
            blank=True,
        )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    from django.contrib import admin
    from .models import Customer
    from django import forms
     
    class CustomerCreationForm(forms.ModelForm):
        pass
     
    class CustomerChangeForm(forms.ModelForm):
        class Meta:
            model = Customer
            #fields = ("__all__")
            fields = ('fidelite','newsletter')
     
        def __init__(self, *args, **kwargs):
            super(Customer, self).__init__(*args, **kwargs)
            self.fields['customerSponsor'].queryset = Customer.objects.filter(newsletter=True)
            print('toto')
     
    class CustomerAdmin(admin.ModelAdmin):
        #form = CustomerChangeForm
        add_form = CustomerCreationForm
     
        class Meta:
            model = Customer
     
     
    admin.site.register(Customer, CustomerAdmin)
    Comme vous pouvez le voir je suis rester sur quelques choses de simple. Cependant le formulaire reste le même... Pas de filtre ni de redéfinition par rapport au champ renseigné...
    Il s'agit d'un test :

    Pour le résultat voulu : je souhaite filtrer les clients dont le champ inactive = False sur l'utilisateur (myUser) et dont le client est différent du mien

    Il s'agit de la page administration.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 159
    Points : 52
    Points
    52
    Par défaut
    J'ai trouvé une solution, si quelqu'un en a une meilleur je suis preneur !

    Ma méthode init n'était pas correcte en python 3.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    from django.contrib import admin
    from .models import Customer
    from django import forms
    from myUser.models import User
     
    class CustomerCreationForm(forms.ModelForm):
        pass
     
    class CustomerChangeForm(forms.ModelForm):
        class Meta:
            model = Customer
            #fields = ("__all__")
            fields = ('fidelite','newsletter','customerSponsor')
     
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            customer_id = kwargs.pop('instance').id
            self.fields['customerSponsor'].queryset = Customer.objects.exclude(id=customer_id)
            for user_id in Customer.objects.values_list('myUser', flat=True).order_by('myUser'):
                user = User.objects.filter(id=user_id).values_list('is_active', flat=True)
                if user[0]==False:
                    self.fields['customerSponsor'].queryset = Customer.objects.exclude(myUser=user_id)
     
    class CustomerAdmin(admin.ModelAdmin):
        form = CustomerChangeForm
        add_form = CustomerCreationForm
     
        class Meta:
            model = Customer
     
     
    admin.site.register(Customer, CustomerAdmin)

Discussions similaires

  1. [V8] Filter champ many2one
    Par brudao dans le forum Odoo (ex-OpenERP)
    Réponses: 3
    Dernier message: 28/09/2016, 16h49
  2. [1.x] admin-generator champs filter pas vide
    Par erictomcat dans le forum Symfony
    Réponses: 3
    Dernier message: 21/01/2011, 12h16
  3. [1.x] surcharge admin générator champs cle etrangere
    Par mantex dans le forum Symfony
    Réponses: 8
    Dernier message: 15/12/2010, 13h18
  4. [1.x] modifier un champ filter date dans l'admin generator
    Par erictomcat dans le forum Symfony
    Réponses: 23
    Dernier message: 21/10/2010, 17h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo