所以我一直嘗試更新外鍵模型的字段時遇到了問題。我試圖通過另一個模型的方法更新字段,但它似乎沒有正常工作,因爲我運行我的tests.py時得到不正確的值。我正在嘗試更新「total_purchased」的值。這裏是什麼,我基本上是試圖完成一個例子:Django外鍵的模型字段沒有正確更新
我使用Django 1.6.4
如果問題太長,總結的東西了,有以下2行允許嗎?我是一個Django的類模型方法中做這件事:
Ex: Model.ForeignKeyModel.field = some_value
Model.ForeignKeyModel.save()
通過以下3種型號:
class Meal (models.Model):
name = models.CharField(max_length=255)
total_purchased = models.IntegerField(default=0, validators=[MaxValueValidator(capacity)])
capacity = models.IntegerField(default=500)
class Item (models.Model):
cart = models.ForeignKey(Cart)
meal = models.ForeignKey(Meal)
quantity = models.IntegerField(validators=[MinValueValidator(0)], default=0)
class Cart (models.Model):
delivery = models.ForeignKey(DeliveryInfo)
subscription = models.BooleanField(default=False)
customer = models.ForeignKey(User)
def add(self, meal, quantity):
""" Dual Add/Remove from cart method, (quantity replaces current quantity) """
item = Item.objects.get_or_create(cart=self, meal=meal)[0]
remaining_capacity = item.meal.capacity - item.meal.total_purchased
# Meal exists on our cart, so proceed with adding or removing
if quantity <= remaining_capacity:
if quantity == 0:
# Add back whatever quantity the user didn't buy
item.meal.total_purchased = 0
item.meal.save()
# Remove entire item from cart (quantity = 0)
item.delete()
elif quantity == item.quantity:
# Do nothing if cart quantity equals current quantity
pass
else:
if quantity < item.quantity:
# Decrement total purchased
item.meal.total_purchased -= (item.quantity - quantity)
item.meal.save()
else:
# Increment total_purchased by the quantity we're adding to the cart
item.meal.total_purchased += (quantity - item.quantity)
item.meal.save()
# Update the Cart
item.quantity = quantity
item.save()
remaining_capacity = item.meal.capacity - item.meal.total_purchased
else:
exceeded = abs(remaining_capacity - quantity)
raise ValidationError("Your cart exceeds the total remaining quantity by {0}!".format(exceeded))
在更新它的工作原理周圍的第一次,但似乎忽略下一個添加到購物車方法調用和我結束了我的tests.py如下: self.assertEqual(item.total_purchased,2) Asse田:1 = 2
我不知道這是否是因爲車更新正在發生在tests.p或者如果我以某種方式錯誤地保存數據。任何幫助將不勝感激謝謝。
如這裏要求是我tests.py在那裏我從運行測試:
customer = User.objects.filter(pk=1)[0]
delivery_info = DeliveryInfo.objects.filter(owner=customer)[0]
cart_order = CartOrder.objects.create(owner=customer, delivery=delivery_info, subscription=False)
# Query the meal_items
curry_item = Meal.objects.get(pk=1)
burger_item = Meal.objects.get(pk=2)
# Add some meal items to our cart, the cart_order add method creates Items
cart_order.add(curry_item, 2)
cart_order.add(burger_item, 1)
self.assertEqual(burger_item.total_purchased, 1)
# Removing one item from the cart
cart_order.add(curry_item, 1)
# Doing nothing to the cart
cart_order.add(curry_item, 1)
**這是它無法正確地更新值:**
# Adding an item to the cart
cart_order.add(burger_item, 2)
self.assertEqual(burger_item.total_purchased, 2)
您能分享您的購物車的相應代碼/視圖嗎? – Jingo
@Jingo添加了我的tests.py部分,我正在運行代碼。我還沒有設置任何意見。謝謝。 – njamaleddine