Django / w MySql: запрос данных по внешнему ключу (Filter / get / get_object_or_404 ()) - PullRequest
0 голосов
/ 11 июня 2018

Я начал Django с 2 недель, и я пытаюсь получить информацию из таблицы 'Зарплата' относительно pk 'matriculeemp', выбранного в URL, 'matriculeemp' является внешним ключом 'Salary' и pk изТаблица сотрудников.

Мне не удалось найти ответ ни по другому посту stackoverflow, ни по моим постам на других форумах, поэтому я прихожу к вам.У меня есть эти модели и это мнение.Эти пути в моем urls.py моей папке приложения:

Модели

class Salaire(models.Model):
date = models.DateField(db_column='Date') 
charge_patronale_mensuel = models.FloatField(db_column='Charge_Patronale_Mensuel', blank=True, null=True) 
charge_salariale_mensuel= models.FloatField(db_column='Charge_Salariale_Mensuel', blank=True, null=True) 
autre_charge_mensuel_fixe = models.FloatField(db_column='Autre_Charge_Mensuel_Fixe', blank=True, null=True) 
salaire_brut_mensuel = models.FloatField(db_column='Salaire_Brut_Mensuel', blank=True, null=True) 
matriculeemp = models.ForeignKey(Employe, models.DO_NOTHING, db_column='MatriculeEmp', blank=True, null=True) 
salaire_net_mensuel = models.FloatField(db_column='Salaire_Net_Mensuel', blank=True, null=True) 
charge_variable_mensuel = models.FloatField(db_column='Charge_Variable_Mensuel', blank=True, null=True)

class Meta:
    db_table = 'salaire'
    ordering = ["date"]

class Employe(models.Model):
    matriculeemp = models.AutoField(db_column='MatriculeEmp', primary_key=True)
    nomemp = models.CharField(db_column='NomEmp', max_length=15, blank=True, null=True) 
    prenomemp = models.CharField(db_column='PrenomEmp', max_length=15, blank=True, null=True) 
    datenaissanceemp = models.DateField(db_column='DateNaissanceEmp', blank=True, null=True) 
    dateembaucheemp = models.DateField(db_column='DateEmbaucheEmp', blank=True, null=True) 
    genreemp = models.CharField(db_column='GenreEmp', max_length=10, blank=True, null=True) 
    codefonc = models.ForeignKey('Fonction', models.DO_NOTHING, db_column='CodeFonc', blank=True, null=True)  # Field name made lowercase.
    codecateg = models.ForeignKey(Categorie, models.DO_NOTHING, db_column='CodeCateg', blank=True, null=True)  # Field name made lowercase.
    codeville = models.ForeignKey('VilleEmp', models.DO_NOTHING, db_column='CodeVille', blank=True, null=True)  # Field name made lowercase.
    codedepartement = models.ForeignKey(DepartementEmp, models.DO_NOTHING, db_column='CodeDepartement', blank=True, null=True)  # Field name made lowercase.
    date_de_sortie = models.DateField(db_column='Date_De_Sortie', blank=True, null=True) 

def __str__(self):
    """
    String for representing the Model object (in Admin site etc.)
    """
    return self.nomemp

class Meta:
    db_table = 'employe'
    ordering = ["nomemp"]
    verbose_name = "Employé"

Просмотры

class EmployeDetailView(DetailView):
    model = Employe
    def employeDetailView(self,request,pk,salaire__matriculeemp):
        try:
            employe=Employe.objects.get(pk=pk)
            salaire=get_object_or_404(pk=matriculeemp__matriculeemp)
            #Book.objects.filter(publisher__name='BaloneyPress').count()
            #albumgroupe= Album.objects.filter(nomgroupe__nomgroupe__contains=request.POST['searchgroupe'])     

        except Employe.DoesNotExist:
            raise ("Book does not exist")
     return render(
     request,
     'Compta-IMC/employe_detail.html',
     context={'employe':employe, 'salaire':salaire}
     )

urls

urlpatterns = [
path('', views.index, name='index'),
path('employes/', views.EmployeListView.as_view(), name='employes'),
#path('employe/<int:pk>', views.EmployeDetailView.as_view(), name='employe-detail'),
path('employe/<int:pk>', EmployeDetailView.as_view(), name='employe-detail'),

 ]

MyЦель состоит в том, чтобы получить всю информацию о заработной плате относительно прохода matriculeemp в pk в URL, чтобы опубликовать ее в моем шаблоне employee_detail.html, заранее благодарю за помощь.

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Я не знаю, почему вы определяете другой метод employeDetailView в вашем DetailView.Вы можете просто определить template и использовать context_object_name в html следующим образом.employe.salaire_set предоставляет все связанные данные о зарплате для этого сотрудника.

class EmployeDetailView(DetailView):
    model = Employe
    template_name = "Compta-IMC/employe_detail.html"
    context_object_name = 'employe'


 {% for salarie in employe.salaire_set.all %}
    {{salarie.date}}
    ....
  {% endfor %}

Для получения последней позиции вы можете определить свойство Meta в вашем Model следующим образом:

class Salaire (models.Model): .... ....

 class Meta:
     get_latest_by = 'date'

Теперь вы можете получить последний элемент как:

            {{employe.salaire_set.latest.date}}
            {{employe.salaire_set.latest.charge_patronale_mensuel}}
0 голосов
/ 11 июня 2018

Из того, что я понял из вопроса, который вы хотите получить Салари на основе идентификатора сотрудника. Тогда это должно работать нормально для загрузки данных из таблицы Салари

class EmployeDetailView(DetailView):
    model = Employe
    def employeDetailView(self,request,pk,salaire__matriculeemp):
        try:
            employe=Employe.objects.get(pk=pk)
            salaire=get_object_or_404(matriculeemp=employe)
            #Book.objects.filter(publisher__name='BaloneyPress').count()
            #albumgroupe= Album.objects.filter(nomgroupe__nomgroupe__contains=request.POST['searchgroupe'])
        except Employe.DoesNotExist:
            raise ("Book does not exist")
     return render(
     request,
     'Compta-IMC/employe_detail.html',
     context={'employe':employe, 'salaire':salaire}
     )

Дайте мне знать, если это работает

...