2017-09-14 6 views
0

Je suis débutant dans Django. J'ai deux modèlesComment ajouter plusieurs clés étrangères dans Django

class Employee(models.Model): 
    full_name = models.CharField(max_length=120,default=None) 
    designation = models.CharField(max_length=80,default=None) 

class Leave(models.Model): 
    employee = models.ForeignKey(Employee, related_name='employee') 
    number_of_days = models.IntegerField(default=0) 

Maintenant, j'ai inline congé modèle avec des employés dans admin.py afin que je puisse ajouter autant de feuilles que je veux des employés Mais lorsque je récupère ce modèle dans les vues nouvelles Leave s sont créés , tout ce que je veux est un employé devrait montrer total = number of days, mais il crée de nouvelles feuilles, pas en mesure de construire une logique ici, je suis coincé, s'il vous plaît demander si vous ne comprenez pas ce que je demande.

+1

montrer votre code de la vue s'il vous plaît –

+0

quel est votre résultat attendu? vous voulez laisser le compte à la place quitte? pourquoi vous avez besoin de plus de foreignkey –

+0

désolé, je devrais avoir clarifié, je veux tout le nombre de jours total dans chaque employee_id – sourabhah

Répondre

1

Vous ne savez pas exactement ce que vous demandez, mais je suppose que vous voulez afficher le nombre total de jours d'absence d'un employé dans l'admin. Vous pouvez utiliser aggregation et Sum en particulier et une méthode personnalisée sur votre modèle:

# models 
from django.db.models import Sum 

class Employee(models.Model): 
    def absent_days(self): 
     return self.leaves.aggregate(s=Sum('number_of_days'))['s'] or 0 
    absent_days.short_description = 'Absent days' # used as column header/field label 

class Leave(models.Model): 
    # note the changed related name! 
    employee = models.ForeignKey(Employee, related_name='leaves') 

# admin 
class EmployeeAdmin(admin.ModelAdmin): 
    readonly_fields = [..., 'absent_days', ...] 
    fields = [..., 'absent_days', ...] 
    list_display = [..., 'absent_days', ...] 
+0

A été en train de taper pendant que vous avez répondu. Votre solution d'agrégation dépasse de loin ma suggestion :) –