我正在制作一个食品网站。
当用户上传关于餐馆的评论时,
我想根据Google Map API保存用户输入的餐馆名称和位置。
所有保存在餐厅模型中的信息
class Restaurant(models.Model):
restaurant_id = models.CharField(max_length=20, primary_key=True)
name = models.CharField(max_length=200)
longitude = models.CharField(max_length=200)
latitude = models.CharField(max_length=200)
def __str__(self):
return self.name.encode('utf-8', errors='replace')
我有两个视图功能来保存数据。
我使用Ajax获取位置数据
def position(request):
if request.method == 'GET':
local_lat = request.GET['latitude']
local_lng = request.GET['longitude']
Restaurant.objects.create(
latitude = local_lat,
longitude =local_lng,
)
return HttpResponse(lat)
使用创建视图功能获取用户发布的餐馆名称
def create(request):
if request.method == 'POST':
local_form = AddForm(request.POST,request.FILES)
if local_form.is_valid():
local_restaurant = local_form.data.get("restaurant")
local_restaurant_id = str(len(Restaurant.objects.all()) + 1)
Restaurant.objects.create(
restaurant_id = local_restaurant_id,
name = local_restaurant,
)
return render(request, 'index.html')
else:
local_form = AddForm(request.POST)
return render(request, 'create_meal.html',)
else:
return render(request, 'create_meal.html',)
但是,我无法将数据真正保存到数据库中,因为我使用两个视图函数来创建相同的模型。
我该如何解决?
=================添加=================
在我的html文件中,我的表单是用户输入他们的餐馆
<form id="add-meal-form" class="form" action="#" method="POST" role="form" >
{% csrf_token %}
{{ form.as_p }}
<div class="form-group">
<input type="text" class="form-control " id="restaurant" name="restaurant" >
</div>
<div class="form-group">
<input type="text" class="form-control " id="meal" name="meal" >
</div>
<div class="text-center">
<button type="submit" id="send" class="btn btn-primary" href="/">Submit</button>
</div>
</form>
如果用户输入餐馆名称,它将同时获得它的纬度和经度。
如果用户提交按钮,则餐馆名称将保存在餐厅模型中。
我不明白如何同时保存这两个数据。
答案 0 :(得分:0)
如果我理解正确,您可以更新数据库中的实例,而不是再创建一个实例。您只需要使用pk访问该实例:
restaurant = Restaurant.objects.get(restaurant_id=some_id)
然后更新它:
restaurant.latitude = local_lat
restaurant.longitude = local_lng
然后保存:
restaurant.save()
现在您需要考虑的是如何将some_id
传递给更新视图。如果您使用Ajax,您可以使用HTML data
属性执行此操作,然后使用javascript获取它并将其与您的ajax请求一起传递。