使用没有表单的视图创建django对象

时间:2012-12-05 18:54:06

标签: python django django-models django-views

我想知道如何能够根据用户要访问的URL在数据库中创建对象。

比如说他们会去/ schedule / addbid / 1 /这会在表格中创建一个对象,其中包含出价的所有者,他们出价的时间表以及出价是否已经完成。这就是我目前为我的模型所用的出价。

class Bids(models.Model):
   id = models.AutoField("ID", primary_key=True, editable=False,)
   owner = models.ForeignKey(User)
   biddedschedule = models.ForeignKey(Schedule)
   complete = models.BooleanField("Completed?", default=False)

biddedschedule将基于URL中的数字,因为在这种情况下1将是计划表中的第一个计划

关于如何做到这一点的任何想法?

3 个答案:

答案 0 :(得分:5)

您应该使用id获取urls.py参数:

#urls.py
from appname.views import some_view

urlpatterns = patterns('',
    url(r'^schedule/addbid/(?P<id>\d+)$', some_view),
    ...
)

查看有关capturing parameters in the urlconf的文档。

然后,在views.py中,您应该使用在URL中传递的Bids,当前登录的用户(id)和request.user来构造biddschedule对象来自您的数据库的{1}}。例如:

#views.py
def some_view(request, id):
    if request.user.is_authenticated():
        # get the biddschedule from your DB
        # ...
        bids = models.Bids(id=id, owner=request.user, biddedschedule=biddedschedule)
        bids.save()
        return HttpResponse("OK")
    return Http404()

答案 1 :(得分:1)

通过urlconf捕获号码。通过request.user获取当前用户。通过调用其构造函数创建模型实例,并通过其save()方法将其保存到数据库中。

答案 2 :(得分:-1)

`#view.py under a post or get method`

    new_bird, created = Bids.objects.get_or_create(
         owner = user_obj,
          biddedschedule = biddedschedule_obj,                
          complete = bool
          )
    new_bird.save()