1

Hey I want retrieve all staff information with there respective Operating Hours please help me, Here is my models

class Staff(models.Model):

    vendor = models.ForeignKey(Vendor,on_delete=models.DO_NOTHING,blank = True)
    name = models.CharField(max_length=100)
    last_name = models.CharField(max_length = 100)
    gender = models.IntegerField(choices=GENDER_TYPE, default=0)



class OperatingHours_staff(models.Model):

    staff = models.ForeignKey(Staff,related_name='days',on_delete = models.CASCADE)
    day = models.IntegerField(choices = constants.DAYS)
    start_time = models.TimeField()
    end_time = models.TimeField()

Thanks in Advance

Samuel Liew
  • 76,741
  • 107
  • 159
  • 260
  • What did you try so far? – olinox14 Aug 30 '19 at 07:40
  • Possible duplicate of [django model foreign key queryset selecting related fields](https://stackoverflow.com/questions/5380529/django-model-foreign-key-queryset-selecting-related-fields) – michjnich Aug 30 '19 at 07:46
  • queryset = Staff.objects.all().prefetch_related('days_set').values() i tried this but still getting only staff data – pratik veer Aug 30 '19 at 07:59

1 Answers1

1

You can try like this:

from datetime import datetime

Staff.objects.filter(
    days__day="SOME_DAY",
    days__start_time__lte=datetime.now().time(),
    days__end_time__gte=datetime.now().time()
)

Basically I am querying using related objects. You have defined related_name='days' when defining FK from OperatingHours_staff to Staff.


If you want all the data for staff, then try like this:

Staff.objects.values(
    'days__day', 'days__start_time', 'days__end_time'
)

Or you can iterate through Staff queryset(using prefetch_related() to reduce DB hit):

for staff in Staff.objects.all().prefetch_related('days'):
    print(staff.days.all())

Or if you have a staff then use reverse relation like this:

staff = Staff.objects.first()
staff.days.all()
ruddra
  • 50,746
  • 7
  • 78
  • 101
  • {"name":"aarti","mobile":9227890987,"email":"aartidhav25@gamil.com","last_name":"veer","job_title":"hair ","gender":2, "days":[ {"day":"1","start_time":"09:23:30","end_time":"07:23:30"}, {"day":"2","start_time":"09:23:30","end_time":"07:23:30"}, {"day":"3","start_time":"09:23:30","end_time":"07:23:30"} ] } – pratik veer Aug 30 '19 at 09:36
  • i want queryset like this which gives staff as well as days info – pratik veer Aug 30 '19 at 09:37
  • Thanks ruddra for your valuable time – pratik veer Aug 30 '19 at 11:35