Создание запросов 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)
- Невозможно понять, что вы хотите запросить.
- Либо отредактируйте свое сообщение, либо прокомментируйте, что вы хотите.