2015-10-19 60 views
0

我正在構建一個Django表單,其中每個字段可以有多個來自用戶的列輸入。例如,讓用戶輸入體重每星期需要一個構建具有多列的Django表單字段的示例

 week1 week2 week3 week4 
weight 120 125 123 130 

我的原始代碼被簡化這樣的:

models.py

class Person(models.Model): 
    weight = models.PositiveIntegerField(default=0) 

forms.py

class PersonCreateForm(forms.ModelForm): 
    class Meta: 
     model = Person 

views.py

class PersonCreateView(CreateView): 
    model = Person 
    template_name = 'add_person.html' 
    form_class = PersonCreateForm 

從django文檔,MultiValueField似乎是需要的?還是formset工廠? (請舉例)https://docs.djangoproject.com/en/1.8/ref/forms/fields/#multivaluefield

+0

你能解釋一下爲什麼一個被擱置?有很多問題要求提供例如上傳文件等的例子,這些文件被高度投票。 – coder

+0

我刪除了'更好'包的段落,所以在這個問題中沒有任何爭論。現在這是一個純粹的編程問題。你可以取消暫停嗎?我在等待別人在這裏回答。 – coder

回答

0

我不認爲我會按照你現在的方式去做這件事。而不是有許多不同的「星期」作爲列,更有意義的是有一個「星期」列,並將每個條目作爲自己的行。想象一下,讓人們每週輸入體重5年。這會給你260列!

我反而嘗試這樣的事:

models.py

class Person(models.Model): 
    user = models.ForeignKey(User) #many to one relationship to User table 
    week = models.PositiveIntegerField() 
    weight = models.PositiveIntegerField() 

通過這種方式,您可以快速,輕鬆地執行各種查詢,如設計數據庫:查詢每個單獨看所有的數據,讓每個用戶在特定的一週。

views.py

current_user = request.user 
Person.objects.filter(user=current_user) 

    OR 

current_user = request.user 
Person.objects.filter(week=4) 
+0

存儲過去數據的想法很好。你的意思是保留一行「周」,其價值由用戶填寫?這將能夠自動顯示多行,如week1,week2,week3等? – coder

+0

數據庫中的每個條目(行)只會涉及1個特定的星期。所以從上面的例子中的數據可能是: USER_ID:4(自動將表中的列當您使用ForiegnKey) 一週:1 重量:145 你可以很容易地創建一個表單,需要1項在同一時間或一個用戶可以輸入過去10周以上(數字無關緊要)。讓它顯示多個星期就像從上面使用我的第一個查詢一樣簡單,並將結果傳遞給您的模板,您可以在該模板中處理每週顯示所有數據。 – prawg

+0

這是否允許用戶一次輸入10周的數據?也就是說,HTML可以在過去10周呈現10行? – coder

相關問題