Vous n'êtes pas identifié(e).
Bonjour à tous,
J'ai eu un peu de mal à choisir un sujet de message, je vous présente mes excuses
Je suis débutant sur Django, mon problème va certainement en faire sourire plus d'un d'entre vous...
Voilà mon problème :
J'ai une table Partner qui contient des champs booléens customer, employee.
J'aimerai récupérer une liste pour seulement Partner.customer == True et pouvoir les utiliser dans la partie admin (en fait, une Habitation contient un propriétaire et optionnellement un locataire qui sont clients). Pour l'instant, les combos propriétaire et locataire de ma page admin Habitation me donnent une liste entière des partenaires, y compris les employés).
J'ai pensé à créer une classe Client héritée de Partner, il y a peut-être une solution plus élégante ?
Dernière modification par nicolas08 (25-04-2013 11:59:01)
Hors ligne
Vous souhaitez faire ceci que dans l'administration ? Il est possible de créer une classe pour personnaliser l'administration de votre modèle. Ainsi, vous pouvez par exemple ajouter une option pour filtrer vos Partner selon le champ customer (Qu'il soit à True, False ou peu importe)
#-*- coding:utf-8 -*-
from django.contrib import admin
from models import Partner
class PartnerAdmin(admin.ModelAdmin):
list_display = ('nom', 'customer', ) # Champs à afficher
list_filter = ('customer', 'employee', ) # Précision du filtrage possible (par état 'customer' ici)
admin.site.register(Partner, PartnerAdmin)
Pour plus d'informations : Cours Django - Personnalisons l'administration
Hors ligne
En effet, j'aurai sûrement besoin de ce filtrage dans le modèle plus tard.
Au début, je serai le seul à utiliser l'application, mais peut-être qu'un accès aux techniciens pourrait être une bonne chose par la suite...
J'avais déjà effectué ce filtrage. Mais au niveau d'une édition d'intervention (par un technicien), la combobox me renvoient une liste de tous les partenaires à partir du modèle. Même chose dans l'édition due habitation, qui me renvoie tous les partenaires, y compris les techniciens)
Merci beaucoup pour votre réponse, et pour votre rapidité
Dernière modification par nicolas08 (25-04-2013 13:04:58)
Hors ligne
Je devrai peut-être créer des tables différentes, mais j'utilise la table d'OpenErp afin d'éviter une double saisie.
Hors ligne
Dans l'admin, il est encore possible de filtrer dans ce cas, si vous souhaitez garder le calque "OpenErp" :
class HabitationAdmin(admin.ModelAdmin):
# Champs de tout à l'heure...
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'partner':
kwargs['queryset'] = Partner.objects.exclude(customer=False)
Plus d'info ici encore une fois : http://www.stereoplex.com/blog/filterin … ango-admin. J'espère avoir compris et bien répondu à votre question
Dernière modification par Ssx`z (25-04-2013 13:12:00)
Hors ligne
Super !
Que feriez-vous, personnellement, quand à la base Openerp ? Une nouvelle base, quitte à faire une double saisie, ou garder celle d'OpenErp, quitte à galèrer un peu plus pour programmer ?
Merci beaucoup, je vais bien avancer aujourd'hui
Hors ligne
La base de données idéale (3NF/BCNF dans la littérature informatique) est celle où il n'y a pas de redondance, et donc pas de double saisie : en effet, il est possible de faire des erreurs lors de la double saisie ou oublier des mises à jour.
Avec Django, il est possible de redéfinir la plupart des requêtes effectuées dans l'administration, si l'on cherche un peu. Usez donc de cette fonctionnalité, qui est à mon avis plus stable sur le long terme que de faire de la double saisie Cela parait plus complexe au niveau programmation au premier abord, mais si le code est documenté et explique bien la démarche, le résultat est le même et limite plus claire (une seule base à gérer, pas de confusion possible)
Hors ligne
Alors j'ai bien commencé
Un grand merci à vous pour vos conseils, à bientôt (pas trop tôt j'espère )
Hors ligne