У меня есть две модели: Order
и OrderItem
.Как мне сэкономить внешний ключ?
class OrderItem(SmartModel):
shopping_id = models.CharField(max_length=50,db_index=True)
quantity = models.IntegerField(default=0)
item = models.ForeignKey(Item)
order = models.ForeignKey(Order)
это, как я создавать и сохранять OrderItem
объект
if not item_in_orders:
# creat and save a new order item
anon_user = User.objects.get(id=settings.ANONYMOUS_USER_ID)
try:
order= Order.objects.get(pk=order_id)
except:
order = Order.objects.create(created_by=anon_user,modified_by=anon_user)
oi=OrderItem.objects.create(order=order,shopping_id=_shopping_id(request),
quantity=quantity,
item=i,
created_by=anon_user,
modified_by=anon_user)
oi.save()
Теперь я должен отметить, что OrderItem
объект выше создается перед Order
объекта.
class Order(SmartModel):
email = models.EmailField(max_length=50,help_text="Needed as alternative")
mobile = PhoneNumberField(max_length=20,default='+2507####')
billing_name= models.CharField(max_length=50)
billing_address= models.CharField(max_length=50)
billing_city = models.CharField(max_length=50)
обе модели ModelForms и проверяются в порядке, за исключением того, когда две созданы две строки в базе данных создаются для Order
. Первая строка, которая не заполняется, я подозреваю, создается этим кодом при создании OrderItem.
order = Order.objects.create(created_by=anon_user,modified_by=anon_user)
oi=OrderItem.objects.create(order=order,shopping_id=_shopping_id(request),
quantity=quantity,
item=i,
created_by=anon_user,
modified_by=anon_user)
oi.save()
Вторая строка создается, когда я сохранить Order
объект и отлично.
Имейте в виду, что OrderItem
создан до Order
, а позднее это поле с иностранными ключами в первом.
Мое требование для моего приложения django заключается в том, что элемент заказа создается перед клиентом (в моем случае Order
). Любые другие идеи приветствуются.
Какова роль 0f i? – masterofdestiny
Как создать элемент заказа перед заказом? элемент заказа нуждается в заказе внешнего ключа – catherine
@masterofdestiny 'i' - это переменная с меткой, содержащая элемент, изменит свое имя, но это не проблема, я могу вас заверить. Я опубликовал меньше кода, обычно я не получаю много помощи из-за размещения слишком большого количества кода в моих вопросах. поэтому я разместил необходимые данные. –