2013-03-11 2 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

+0

@catherine я просто сделал –

+0

почему вы исключаете ресторан в форме, если вы этого хотите? – catherine

ответ

0

Я думаю, я буду только гадать здесь или создать пример сценария:

После того как пользователь создавать информацию и выбрать свой ресторан. Они должны перейти в следующую форму, где пользователь выбирает свой заказ. Идентификатор ресторана должен пройти в следующей форме, так что, когда пользователь отправит заказ, мы будем использовать этот идентификатор ресторана при сохранении их заказа.

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 –

+0

url, вот так, 'url (r '^ checkout/$' , show_checkout, name = "checkout") ' –

+0

' orders.restaurant_id' от вашей 'модели заказа' не в вашей форме, поэтому не беспокойтесь, если вы исключите это в свою форму. Они разные. Чтобы иметь возможность пройти идентификатор, вы должны изменить свой URL-адрес, чтобы он мог пройти restaurant_id – catherine

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

. Я не хочу получать ресторан по имени, потому что там будет несколько ресторанов, которые вы знаете .., а другой код, который я не включил, не обязательно ... –

+1

@SuziemacTani, вам нужно получить как-нибудь ресторанный объект, запросив по имени или в другом поле. – Rohan

Смежные вопросы