выбрать уникальные строки на основе одного отдельного столбца - Django - PullRequest
0 голосов
/ 18 января 2019

Я хочу уникальную строку, основанную на timesheet_users. Но теперь проблема в том, что он отображает только timesheet_users значения в шаблоне. И даже если я добавлю другие поля в `values ​​('...', '...', ....), тогда выбрать уникальную строку не получится.

Я использую MySQL, поэтому не могу использовать distinct('timsheet_user') - выдает ошибку

Поля DISTINCT ON не поддерживаются этим сервером базы данных

TimesheetEntry.objects.filter(
    timesheet_jobs__job_company = self.request.user.userprofile.user_company
    ).values(
        'timesheet_users'
    ).distinct()

Models.py

class TimesheetEntry(models.Model):
    timesheet_users = models.ForeignKey(User, on_delete=models.CASCADE,related_name='timesheet_users')
    timesheet_jobs = models.ForeignKey(Jobs, on_delete=models.CASCADE,related_name='timesheet_jobs')
    timesheet_clock_in_date = models.DateField()
    timesheet_clock_in_time = models.TimeField()
    timesheet_clock_on = models.DateTimeField(auto_now_add=True)
    timesheet_clock_in_by = models.ForeignKey(User, on_delete=models.CASCADE,related_name='timesheet_user_clock_in_by')

1 Ответ

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

Как @AnupYadav предложил для raw запроса.Я пришел с этим MySQL Query

SELECT * FROM timesheet_entry t1 INNER JOIN ( SELECT timesheet_users_id, MAX(id) AS latest_id FROM timesheet_entry GROUP BY timesheet_users_id ) t2 ON t1.timesheet_users_id = t2.timesheet_users_id AND t1.id = t2.latest_id

Это мой вид, где я использовал запрос

class ReportView(LoginRequiredMixin, generic.TemplateView):
    template_name = 'admin/clock/report.html'

    def get_context_data(self, **kwargs):   
        context = super(ReportView, self).get_context_data(**kwargs)
        context['reports'] =  TimesheetEntry.objects.raw('SELECT * FROM timesheet_entry t1 INNER JOIN ( SELECT timesheet_users_id, MAX(id) AS latest_id FROM timesheet_entry GROUP BY timesheet_users_id ) t2 ON t1.timesheet_users_id = t2.timesheet_users_id AND t1.id = t2.latest_id')
        return context
...