2013-03-11 74 views
0

我有一个模型Order如何将外键绑定到对象?

class Order(SmartModel): 
    date = models.DateTimeField(...) 
    status = models.IntegerField(...) 
    restaurant = models.ForeignKey(Restaurant,null=True,blank=True,default = None,help_text="The restaurant the customer order from") 
    email = models.EmailField(...) 
    mobile = PhoneNumberField(...) 

我现在的储蓄,像这样的对象,

orders = Order() 
    checkout_form = forms.CheckoutForm(request.POST,instance=orders) 
    orders = checkout_form.save(commit=False) 
    anon_user = User.objects.get(id=settings.ANONYMOUS_USER_ID) 
    orders.created_by = anon_user 
    orders.modified_by = anon_user 
    orders.status = Order.SUBMITTED 
    orders.save() 

正如你我可以看到我已经没救了餐厅(FK场),我应该如何去做那件事。我已经看过这个(https://groups.google.com/forum/?fromgroups=#!topic/django-users/PcSDKZhPVmc)和其他几个例子,但他们让我感到困惑。

我需要搭配〜餐厅〜订购,以便当我查找订单时,我知道它属于哪家餐厅。

恼人的事情是我没有加载djangoproject.com,它已经一周了。

forms.py,

class CheckoutForm(forms.ModelForm): 
    class Meta: 
     model = Order 
     exclude = ('created_by','modified_by','is_active','status','restaurant','date') 

模板,

<table> 
    {{ form.errors }} 
    {{ form.non_field_errors }} 
    {% form_table_row form.email %} 
    {% form_table_row form.mobile %} 
    </table> 
+0

哪来的模板和forms.py码 – catherine 2013-03-11 09:29:58

+0

@catherine我只是做了 – 2013-03-11 09:41:15

+0

为什么你排除餐厅在你的形式,如果你要吗? – catherine 2013-03-11 09:42:21

回答

0

我想我会只是猜测这里或创建示例场景:

用户后创建信息并选择他们的餐厅。他们必须进入用户选择订单的下一个表单。餐厅ID必须通过下一个表单,以便当用户提交订单时,我们将使用该餐厅ID来保存订单。

def save_order(request, restaurant_id): 
    anon_user = User.objects.get(id=settings.ANONYMOUS_USER_ID) 
    orders = Order(restaurant_id=restaurant_id) 

    checkout_form = forms.CheckoutForm(request.POST, instance=orders) 
    checkout = checkout_form.save(commit=False) 

    checkout.created_by = anon_user 
    checkout.modified_by = anon_user 
    checkout.status = Order.SUBMITTED 
    checkout.save() 
+0

这是更喜欢它,但没有字段orders.restaurant_id ..,如果我要这样做,我应该怎么去在urls.py – 2013-03-11 10:00:04

+0

url,就像这样,'url(r'^ checkout/$' ,show_checkout,name =“checkout”)' – 2013-03-11 10:00:54

+0

'orders.restaurant_id'来自您的'订单模型',不在您的表单中,所以如果您在表单中排除该订单,请不要担心。他们是不同的。为了能够通过身份证,你必须修改你的网址,以便它可以通过restaurant_id – catherine 2013-03-11 10:03:29

0

在你看来,你需要得到Restaurant对象,并保存在order。由于您尚未显示完整的视图代码,因此我不确定如何获取Restaurant对象。

下面是示例代码...

orders = Order() 
checkout_form = forms.CheckoutForm(request.POST,instance=orders) 
orders = checkout_form.save(commit=False) 

#get restaurant obj 
restaurant = Restaurant.objects.get(name = "some_restaurant") 
orders.restaurant = restaurant 

anon_user = User.objects.get(id=settings.ANONYMOUS_USER_ID) 
orders.created_by = anon_user 
orders.modified_by = anon_user 
orders.status = Order.SUBMITTED 
orders.save() 
+0

我不想按名称获得餐厅,因为会有几个餐厅,你知道..和其他代码,我没有包括是没有必要的... – 2013-03-11 09:40:17

+1

@SuziemacTani,你需要以某种方式获取餐馆对象,无论是通过名称或其他字段查询。 – Rohan 2013-03-11 09:46:54

相关问题