如何在模型Django中创建两个视图函数

时间:2016-01-04 05:26:01

标签: python django django-models django-views

我正在制作一个食品网站。

当用户上传关于餐馆的评论时,

我想根据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>  

如果用户输入餐馆名称,它将同时获得它的纬度和经度。

如果用户提交按钮,则餐馆名称将保存在餐厅模型中。

我不明白如何同时保存这两个数据。

1 个答案:

答案 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请求一起传递。