单选选择才可以提交_第二篇:DJANGO开发产品选择表amp;调查问卷
三、調查問卷部分
前端實現效果:首頁
首頁效果圖需求:
1、單項、多項選擇,并且隨意增加“其他”的自定義回答,也就是說,單項和多項都可以由后臺控制是否設置額外的“其他”自定義回答項
2、完全自定義回答,即整個問題都由用戶自行編寫
用了好多個晚上,終于很愚蠢地實現了這個需求,model如下:
from django.db import models# Create your models here.class Question(models.Model):"""1、Question作為Answer的外鍵,配合TabularInline能在admin中實現創建問題時,連帶創建問題對應的答案;2、status_choice:控制問題的答案時預設的(即后臺中設置好的)還是由客戶端輸入;3、status_extra:控制問題在顯示完所有答案后,是否再顯示一個“其他”選項;4、display_set:控制問題是否生效,隱藏或顯示。"""CHOICE_TYPE = [(1, '單選'),(0, '多選'),]ANSWER_SHORCE = [(0, '預設答案'),(1, '客戶自定義'),]ANSWER_EXTRA = [(1, '是'),(0, '否'),]DISPLAY_STATUS = [(0, '顯示'),(1, '隱藏'),]question = models.CharField(max_length=255, verbose_name="請填寫問題")other_question = models.CharField(max_length=255, help_text="用來給客戶做自定義回答,請勿填寫", verbose_name="其他", null=True, blank=True)status_choice = models.IntegerField(default=0, choices=CHOICE_TYPE, verbose_name="類型設置", help_text="默認多選,沒啥事不要選擇單選")status_source = models.IntegerField(default=0, choices=ANSWER_SHORCE, verbose_name="預設答案設置", help_text="默認預設,一道題中需要客戶全部自定義回答時請選擇【客戶自定義答案】,并且下方答案不要設置")status_extra = models.IntegerField(default=0, choices=ANSWER_EXTRA, verbose_name="其他回答設置", help_text="默認否,設置為是時,題目會生成一個【其他】的自定義選項")display_set = models.IntegerField(default=0, choices=DISPLAY_STATUS, verbose_name='顯示設置', help_text="默認顯示,設置隱藏時客戶將看不到這道題")def __str__(self):return self.questionclass Meta:verbose_name = verbose_name_plural = "問題"class Answer(models.Model):cn_answer = models.CharField(max_length=255, verbose_name="預設答案")question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name="an_for_question", verbose_name="所屬問題")def __str__(self):return self.cn_answerclass Meta:verbose_name = verbose_name_plural = "答案"class Record(models.Model):name = models.CharField(max_length=20, verbose_name="填寫人姓名")company = models.CharField(max_length=50, verbose_name="公司名稱")questions = models.ManyToManyField(Question, verbose_name="所有問題")answer_preset = models.TextField(max_length=1024, verbose_name="答案", help_text="由客戶提交,無須填寫")answer_extra = models.TextField(max_length=1024, verbose_name="自定義回答", null=True, blank=True, help_text="由客戶提交,無須填寫")answer_other = models.TextField(max_length=1024, verbose_name="其他回答", null=True, blank=True, help_text="由客戶提交,無須填寫")created_time = models.DateTimeField(auto_now_add=True, verbose_name="提交時間")def __str__(self):return self.companyclass Meta:verbose_name = verbose_name_plural = "調研記錄表"在model Record是用戶提交的記錄表,考慮到“其他”及完全自定義回答都是由用戶填入的,最后寫入到數據庫,經過一番實驗后,最后才決定將上述自定義選項寫入到Record中,所以均使用了TextField字段,字段的處理耗費了大量時間,耗費更多時間的是,拿到客戶端提交過來的數據,要怎么處理??
這是整個流程的圖示
問卷--->用戶提交數據--->儲存到Record表--->后臺查看詳情
重點有兩個:
1/用戶提交過來到數據如何整理,以什么形式儲存到數據表中
2/后臺點擊查看詳情時能友好地可視,而不是django默認查看帶修改的頁面
效果如下:
點擊查看能友好地顯示詳情用戶提交后,后臺查看的詳情經過十來天的業余嘗試,Record儲存的數據形式如下:
除了問題使用了外鍵,“其他”及完全自定義回答均為TextField,把客戶端提交過來的數據組織成:問題id 答案 的形式,最后在點擊查看時,對上述一堆堆的id、答案重新組織成【一個問題+ 該問題的所有答案】形式,實現過程非常折磨我,我用有限的編程知識艱難地實現了。
實現過過程地相關文件雖然過程不容易,但全考自己各種查看文檔+百度,最后還是實現了初衷,達到了我的目的,最后也收獲了成就感。
如果你需要代碼,可聯系我,mooremok @163.com 索取。
總結
以上是生活随笔為你收集整理的单选选择才可以提交_第二篇:DJANGO开发产品选择表amp;调查问卷的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python面向对象和面向过程的区别_P
- 下一篇: python类高级用法_十.python