2015-02-10 18 views
0

根據我的知識,無論何時我們創建表格,它都會從表格中提取表格並將其保存到同一個表格中。 例如:如何從特定的表格中創建表格並將其保存到不同的表格

class ExampleForm(forms.Form): 
    class Meta: 
      model=Example 

這裏ExampleFormExample模式形成,一旦提交它保存回Example模型。 我想要的是,我想從表中開發一個表單並將其保存到另一個表中? 這可能嗎?

爲什麼我要這個?

因爲,我創建一個表單,僅包含複選框,這些複選框的標籤從表中檢索,但我想用戶輸入保存到一個不同的表

models.py

class Offer(models.Model): 

    package = models.ForeignKey(Package) 
    discount = models.CharField(max_length=120,null=True,blank=True) 
    transportation = models.CharField(max_length=120,null=True,blank=True) 
    nextTrip = models.CharField(max_length=120,null=True,blank=True) 
    rewardPoints = models.IntegerField(max_length=3,null=True,blank=True) 
    refferals = models.CharField(max_length=3, choices=REFERRAL_CHOICES) 

    def __str__(self): 
     return self.package.packageTitle 

Offer模型來創建的形式,但一旦數據被提交後,應保存在OfferRequest模型

class OfferRequest(models.Model): 
    offerReq = models.ForeignKey(Offer,null=True) 
    userReq = models.ForeignKey(User) 
    discountReq = models.BooleanField(default=False) 
    transportationReq = models.BooleanField(default=False) 
    nextTripReq = models.BooleanField(default=False) 
    rewardPointsReq = models.BooleanField(default=False) 
    refferalsReq = models.BooleanField(default=False) 

    def __str__(self): 
     return self.discountReq 

forms.py

class OfferRequestForm(forms.ModelForm): 
    discountReq = forms.BooleanField(required=False,label="Discount") 
    transportationReq = forms.BooleanField(required=False,label="Transportation") 
    nextTripReq = forms.BooleanField(required=False,label="Next Trip") 
    rewardPointsReq = forms.BooleanField(required=False,label="Reward Points") 
    refferalsReq = forms.BooleanField(required=False,label="Refferals") 
    class Meta: 
     model = OfferRequest 
     fields = ("discountReq","transportationReq","nextTripReq","rewardPointsReq","refferalsReq") 

由於我使得從OfferRequest形式時,其呈現爲如下所示:

()折扣
()運輸
() nextTrip
()反應
()獎勵積分

,但我想要的是:

()折扣:3%
()交通:FREE
()nextTrip:20%
()refferals:是
()獎勵積分:200

上述表格輸出可以呈現,如果窗體是從Offer模式,因爲不同的優惠都在Offer模型

現在,當這種形式(來自Offer派生)提交定義,我希望它得到保存在OfferRequest


盡我所能來解釋,確實問不清楚。

+0

創建從另一個表的另一種形式。在處理'POST'時保存數據,使用第二種形式。 – Rohan 2015-02-10 10:33:13

+0

你能否讓它更清楚一點。我瞭解第二部分關於如何在處理POST時使用第二種形式。如果你可以舉一個例子給出一個代碼段 – dreamer 2015-02-10 10:39:46

+0

沒有得到你想要的。我看到'OfferRequestForm'是從'OfferRequest'創建的,而不是'Offer'。可能你的意思是你想在保存「OfferRequestForm」的同時將'OfferRequest.offerReq'設置爲某個'Offer'模型? – catavaran 2015-02-10 12:21:45

回答

0

如果你想Offer添加的值給OfferRequestForm的字段標籤,那麼你應該重寫__init__()方法:

class OfferRequestForm(forms.ModelForm): 
    ... 
    def __init__(self, *args, **kwargs): 
     offer = kwargs.pop('offer') 
     super(OfferRequestForm, self).__init__(*args, **kwargs) 
     for field in offer._meta.fields: 
      field_name = field.name 
      form_field_name = field_name + 'Req' 
      if form_field_name in self.fields: 
       self.fields[form_field_name].label += \ 
           u': %s' % getattr(offer, field_name) 

所以,現在你必須通過offer參數傳遞給OfferRequestForm的構造:

def offer_req(request, offer_id): 
    offer = get_object_or_404(Offer, pk=offer_id) 
    if request.method == 'POST': 
     form = OfferRequestForm(request.POST, offer=offer) 
     if form.is_valid(): 
      offer_request = form.save(commit=False) 
      offer_request.offerReq = offer 
      offer_request.userReq = request.user 
      offer_request.save() 
      return redirect(offer_request) 
    else: 
     form = OfferRequestForm(offer=offer) 
    return render(request, 'offer_req.html', {'form': form}) 
+0

我有點新的Django,所以這將是很好,如果ü可以解釋第一部分或者至少指出需要一些參考理解 – dreamer 2015-02-12 01:29:23

+0

model._meta'的'好解釋:http://www.b-list.org/weblog/2007/nov/04/working-models/所以我們迭代模型的字段和檢查' Req'字段存在於表單中('self.fields'是表單字段的列表)。如果這樣的領域存在,那麼我們改變它的標籤。 – catavaran 2015-02-12 01:55:35

相關問題