gpt4 book ai didi

mysql - Django 原始查询加入多对多字段

转载 作者:行者123 更新时间:2023-11-29 07:29:43 25 4
gpt4 key购买 nike

模型.py

class RestaurantKeyword(models.Model):
keywords=models.CharField(max_length=200)
def __str__(self):
return str(self.keywords)

class Restaurant(models.Model):
name=models.CharField(max_length=500)
email=models.CharField(max_length=500)
web=models.CharField(max_length=500)
short_description=models.CharField(max_length=500)
description=models.CharField(max_length=500)
phone=models.IntegerField(blank=True,null=True,default=0)
lat =models.FloatField(blank=True,null=True)
lng =models.FloatField(blank=True,null=True)
address1 = models.CharField(max_length=100)
address2 = models.CharField(max_length=100,blank=True)
city = models.CharField(max_length=100)
state = models.CharField(max_length=2)
postalcode = models.CharField(max_length=20)
avg_rating=models.FloatField(blank=True,null=True)
restaurant_type=models.ForeignKey(RestaurantType,on_delete=models.CASCADE)
price=models.IntegerField(blank=True,null=True,default=0)
keywords=models.ManyToManyField(RestaurantKeyword,blank=True)
def __str__(self):
return self.name

SQL 原始查询

SELECT id,name,( 3959 * acos ( cos ( radians(30.696627)) * cos( radians( lat ) ) * cos( radians( lng ) - radians(76.693764) ) + sin ( radians(30.696627) ) * sin( radians( lat ) ) ) ) AS distance  FROM newbackend_restaurant

我有纬度、经度、关键字等参数。我需要一个查询,我可以使用关键字来找到我的结果。但是 keywords 是多对多字段。

数据库模式

enter image description here

最佳答案

通过ManyToManyField Django 会自动生成一个表来管理多对多关系。

所以根据您的模型,我认为原始 sql 看起来像:

SELECT r.id,
r.name,
( 3959 * acos ( cos ( radians(30.696627)) * cos( radians( lat ) ) * cos( radians( lng ) - radians(76.693764) ) + sin ( radians(30.696627) ) * sin( radians( lat ) ) ) ) AS distance
FROM newbackend_restaurant r
LEFT JOIN newbackend_restaurantrestaurantkeyword m2m
ON m2m.restaurant_id = r.id
LEFT JOIN newbackend_restaurantkeyword rk
ON m2m.restaurantkeyword_id = rk.id
WHERE rk.keywords IN ('WORD', 'HELLO');

希望大家自己修改字段和表名。

关于mysql - Django 原始查询加入多对多字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52033076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com