Джанго запрос сравнить две модели - PullRequest
0 голосов
/ 31 января 2019

У меня есть три модели, я хочу показать пользователей, которые обращаются за отпуском, но я не знаю, как этого добиться.Отношение между пользователем и новым отпуском - один ко многим, а баланс отпусков к новому отпуску - много ко многим, а баланс между пользователями - один к одному.Я хочу отображать только данные пользователя и новый отпуск.

 class newleave(models.Model):
    user=models.ForeignKey(User,default='',on_delete=models.CASCADE)
    leave_balance=models.ManyToManyField(Leave_Balance)
    leave=(
            ('annual','annual'),
            ('sick','sick'),

        )

    Leave_type=models.CharField(max_length=100,choices=leave,blank=False,default='')
    dp=(
        ('test','test'),
        ('test1','test1'),

    )

    department=models.CharField(max_length=100,choices=dp,blank=False,default='')
    Start_Date=models.DateField(null=True, blank=False, default=None)
    End_Date=models.DateField(null=True, blank=False, default=None)
    Total_working_days=models.FloatField(null=True, blank=False, default=None)

       def __unicode__(self):
            return  self.Leave_type


class Leave_Balance(models.Model):                                          
        user=models.OneToOneField(User,on_delete=models.CASCADE,primary_key=True,)
    Outstanding_balance=models.FloatField(null=True, blank=True,  default=None)
    Monthly_entitlement=models.FloatField(null=True, blank=True, default=None)
    Monthly_consumption=models.FloatField(null=True, blank=True, default=None)
    Leave_current_balance= models.FloatField(null=True, blank=True, default=None)
    Month=models.CharField(max_length=100,default="",null=True)
    Year=models.CharField(max_length=100,default='')

      def __unicode__(self):
         return  self.Year

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Решение было довольно простым, но мне потребовалось время, чтобы понять его.Я получаю доступ к данным пользовательских моделей через внешний ключ, и Django фактически позаботился о соединениях.

views.py

def Allleaves (запрос):

allleave=NewLeave.objects.all()

return render(request,'allleave.html',locals())

и вallleave.html, я получаю доступ к информации о пользователе через внешний ключ "user"

{% для отпуска в allleave%}

{{оставьте.user.first_name}}

{{exit.user.last_name}}

{{exit.Leave_type}}

{{exit.department}}

{% endfor%}

0 голосов
/ 31 января 2019

Простой способ получить пользователей, у которых есть запись в таблице newleave, -

User.objects.filter(newleave_set__isnull=False).distinct()

. Я бы посоветовал следовать PEP8 для вашего стиля кода, поскольку он позволяет программистам, знакомым с Python,быстро понять намерения программ, которые вы пишете.

Имена классов должны использовать соглашение CapsWord - class NewLeave class LeaveBalance

Имена методов и переменные экземпляра должны быть строчными словами, разделенными подчеркиваниемNewLeave.start_date и т. Д.

...