Создание запросов Django

Я довольно новичок в запросах и Django, поэтому мне нужна помощь в этом деле.

Существует пять моделей:

class User(models.Model):
    host = models.ForeignKey('Host', related_name='users')
    hobbie = models.ForeignKey('Hobbie', related_name='users')
    skill = models.ForeignKey('Skill', related_name='users')
    profile_id = models.UUIDField(blank=True, null=True)
    country = models.CharField(max_length=20)
    status = models.CharField(max_length=10)
    category = models.ManyToManyField('Category', related_name='users', blank=True)


class Host(models.Model):
    name = models.CharField(max_length=50)
    surname = models.CharField(max_length=50)


class Hobbie(models.Model):
    hobbie_code = models.CharField(max_length=3)
    active = models.CharField(max_length=4)


class Skill(models.Model):
    object_type = models.ForeignKey()
    object_id = models.PositiveIntegerField()
    skill_name = models.CharField(max_length=128)


class Category(models.Model):
    permissions = models.CharField(max_length=35)
    category_name = models.CharField(max_length=256)

Нужно получить поля: host_id, hobbie_code (из модели Hobbie), skill_name (из таблицы Skill), profile_id, country, status, category_name (из таблицы Category)

Сейчас использую этот запрос для получения всех значений, но чувствую, что он не правильный.

yesterday = datetime.date.today() - datetime.timedelta(days=1)

users_data = User.objects.all()

user_data = Users.objects.filter(created_on__date=yesterday).values(
            'host_id',
            'country',
            'status',
            'profile_id').exclude(profile_id='0000000')

hobbie_data = Hobbie.objects.filter(users__in=user_data).values_list(
            'hobbie_code',
        )
skill_data = Skill.objects.filter(users__in=user_data).values_list('skill_name',)
category_data = Category.objects.filter(users__in=user_data).values_list('category_name',)
  • Ваши модели не совсем естественны и описательны, попробуйте сделать их лучше и применить следующие изменения, по крайней мере.

В models.py

class User(models.Model):
    # Change this line as you are repeatedly using related name
    # users in three places
    host = models.ForeignKey("Host", on_delete=models.CASCADE, related_name="related_host")
    hobbie = models.ForeignKey("Hobbie", on_delete=models.CASCADE, related_name="related_hobbie")
    skill = models.ForeignKey("Skill", on_delete=models.CASCADE, related_name="related_skill")
    profile_id = models.UUIDField(blank=True, null=True)
    country = models.CharField(max_length=20)
    status = models.CharField(max_length=10)
    category = models.ManyToManyField("Category", related_name="users", blank=True)


class Host(models.Model):
    name = models.CharField(max_length=50)
    surname = models.CharField(max_length=50)


class Hobbie(models.Model):
    hobbie_code = models.CharField(max_length=3)
    active = models.CharField(max_length=4)


class Skill(models.Model):
    # add model to which object_type is related
    object_type = models.ForeignKey("some model", on_delete=models.CASCADE, related_name="some name", blank=True, null=True)
    object_id = models.PositiveIntegerField()
    skill_name = models.CharField(max_length=128)


class Category(models.Model):
    permissions = models.CharField(max_length=35)
    category_name = models.CharField(max_length=256)
  • Невозможно понять, что вы хотите запросить.
  • Либо отредактируйте свое сообщение, либо прокомментируйте, что вы хотите.
Вернуться на верх