2017-06-19 146 views
1

我見過類似的問題,唉,它沒有得到回答。 我有一個應用程序,其功能包括一個名爲SubEntry的部分(如博客條目)。我希望用戶能夠報告SubEntries(即按下「報告」按鈕,填寫一些字段,應用程序發送電子郵件給管理員,保存報告在db是很好有):從CreateView傳遞參數到模板(Django)

流程應該是像那樣:在EntryDetails(url:/ entry/entry-title /)的視圖中,用戶可以點擊SubEntry部分。模態打開並且子模式在擴大的模式中可視化,在「報告子模式」下面有一個按鈕/鏈接。然後可以點擊'報告子輸入'按鈕,出現兩個字段 - 報告原因和記者的聯繫細節(在這裏我只是切換字段的可見性)。我設法顯示錶單(使用getn覆蓋 - 覆蓋get_form_kwargs導致錯誤沒有該條目的條目),但條目或其屬性不顯示...

我的問題是: 1)正在創建一個模型爲報告(ReportSubEntry)一個體面的方法? 2)我似乎無法從CreateReport視圖向report_subentry.html傳遞需要的變量(要作爲正在創建的SubEntry對象的ForeignKey的Entry對象)。

任何想法,建議? Python的3.5,Django的1.10

models.py:

class ReportSubentry(models.Model): 
    Entry = models.ForeignKey('Entry') 
    details = models.CharField(max_length=100) 
    contact = models.EmailField() 

forms.py:

class ReportEntryForm(forms.ModelForm): 
    class Meta: 
     model = ReportSubEntry 
     fields = ['details', 'contact', 'project'] 

views.py:

class CreateReport(CreateView): 
    model = ReportSubEntry 
    form_class = ReportSubEntryForm 
    template_name = 'understand/report_subentry.html' 

# tried two methods to pass the variables: 
def get(self, request, *args, **kwargs): 
    self.object = None 
    title = kwargs.get('title') 
    kwargs['entry'] = get_object_or_404(Entry, title=title) 
    return super(CreateReport, self).get(request, **kwargs) 

def get_form_kwargs(self, **kwargs): 
    title = kwargs.get('title') 
    kwargs['entry'] = get_object_or_404(Entry, title=title) 
    return kwargs 

回答

0

好吧,我已經解決了這個問題。 是爲我工作是壓倒一切的ReportSubentry的get方法,而無需調用父類的get方法唯一的解決辦法:

def get(self, request, *args, **kwargs): 
    self.object = None 
    title = kwargs.get('title') 
    entry = get_object_or_404(Entry, title=title) 
    context_data = self.get_context_data() 
    context_data.update(entry=entry) 
    return self.render_to_response(context_data) 

請隨時去討論它。

0

您使用ReportSubEntry目前的模式是完美的,沒有必要改變它。您需要使用relatedfields才能正確序列化數據。沒有必要重寫任何內容。當用戶點擊報告子條目時,您必須通過Entry模型的pk,因爲它需要知道報告了哪個條目。我假設,因爲你成功地顯示這些pk的條目存在。當您收到包含其他兩個字段的pk時,將獲得pk的相應條目,然後將該對象傳遞給ReportSubentry.objects.create方法。

reportentry表單不應包含外鍵。你有兩個選擇。首先是刪除該字段並使用ajax調用從前端傳入條目的pk,或者在用戶單擊報表子條目時使用javascript添加包含條目pk的禁用輸入字段。

+0

謝謝Arpit提供了一個快速的答案,但唉,我似乎沒有得到它的權利......我還沒有找到一個relatedfields屬性文檔,所以我只是將relatedfields屬性添加到R​​eportPictureForm的Meta:relatedfields = ['details' , '聯繫']。沒有什麼改變。我已嘗試related_fields,把它放在Meta外 - 沒有任何工作,雖然 – fanny

+1

相關的字段是適用於序列化程序它不適用於您的情況 –

+0

啊哈,還有一件事 - SubEntry只是一個圖片,我只能通過Entry( SubEntry的url是Entry的一個字段)。我需要它時,表單模板呈現(獲得後)而這是我唯一缺少的時刻 - 圖片(這是網址)。所以你的建議是使用JavaScript? – fanny