簡體   English   中英

保存表單后,使用外鍵集驗證Django模型

[英]Validation of a Django model using a foreign key set after saving the form

我正在嘗試根據在save(commit=False)之后設置的值來驗證模型。 我該如何實現? 我有多種形式(項目,清單,價格),它們在一個視圖中合並,然后在保存時創建另一個實例。

編輯 :我將嘗試進一步解釋。 每個清單都列出一個項目。 每個項目都有一個類別。 每個類別都有最低價格。 列表中有價格(可以保留多個歷史記錄)。 保存Price實例后,我想驗證該數量是否大於或等於為清單所引用項目的類別設置的最小值。

models.py

...
class Category(models.Model):
  ...
class Item(models.Model):
  category = models.ForeignKey(Category, ...)

class Listing(models.Model):
  for_item = models.ForeignKey(Item, ...)

class Price(models.Model):
  for_listing = models.ForeignKey(Listing, ...)
  amount = MoneyField(...)

class MinPriceForCategory(models.Model):
  category = models.ForeignKey(Category, ...)
  amount = MoneyField(...)

views.py

...
def add_item(self):
  ...
  # create form instances from request.POST etc
  ...
  item = form_item.save()
  listing = form_listing.save(commit=False)
  listing.for_item = item
  listing.save()

  # validation happens in the first call to save()
  price = form_price.save(commit=False)
  price.for_listing = listing
  # I need the validation to happen here so the instance of Listing is available
  price.save()
```

我只是找到了另一種做自己想做的方法,盡管我不確定這是否是正確的方法。 現在,我為依賴於Listing的Model實例化表單,並將Listing的實例傳遞給構造函數:

# views.py
...
form_listing = ListingForm(request.POST)
listing = form_listing.save()

form_price = PriceForm(request.POST, listing=listing)
if form_price.is_valid():
  price = form_price.save()


# forms.py

class PriceForm(forms.ModelForm):
  ...
  def __init__(self, *args, **kwargs):
    self.listing = kwargs.pop('listing', None)
    super(PriceForm, self).__init__(*args, **kwargs)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM