Как добавить несколько типов полей формы вариантов для вопроса в Django? - PullRequest
0 голосов
/ 14 сентября 2018

Я создаю приложение типа «Опросы».В этом приложении будут вопросы, и каждый вопрос будет иметь один или несколько вариантов ответов. Ответом может быть «Текст», «Изображение» или «Видео».

Я создал одну модель с именем «Вопрос» и различные модели для различных типов выбора:

class Question(models.Model):
    question_text = models.TextField()
    category = models.ForeignKey(QuestionCategory)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)


class ChoiceText(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice = models.CharField(max_length=255)


class ChoiceImage(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice = models.ImageField()
  1. Это хороший способ разработки моделей или есть лучший способ решить эту проблему?
  2. Это выглядит не слишком интуитивно и на стороне администратора, какие-либо предложения на стороне администратора?Я посмотрел на https://docs.djangoproject.com/en/2.1/intro/tutorial07/, но все еще не понимаю, как объединить различные варианты в более удобный для пользователя способ.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Я предлагаю вам пойти с той же моделью (выбор). У вас может быть поле с именем choice_type, которое выбирает тип выбора («изображение», «текст», «видео»).

class Choice(models.Model):
    answer_type_choices = (
        ('1','Text'),
        ('2','Image'),
        ('3','Video'),
    )
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_type = model.CharField(max_length=1,choices = answer_type_choices)
    choice = models.CharField(max_length=255)
    choice_media = models.FileField(upload_to='uploads/')

И при добавлении данных от admin или front у вас может быть форма с некоторой настройкой, которая имеет правила валидации в чистом методе (требуются поля, основанные на типе выбора, валидации поля изображения, валидации видеофайла) на основе choice_type.

0 голосов
/ 14 сентября 2018

Это, вероятно, лучший способ сделать это, предполагая, что вопрос может иметь несколько ответов одного типа, например один вопрос может иметь 4 варианта текста и 2 варианта изображения.

В зависимости от того, как вы планируете использовать эти модели, вы можете создать класс моделей с именем Choice и использовать в нем подкласс других моделей.

Форма администратора Django очень настраиваема. Поскольку вы не предоставили нам никаких подробностей, не стесняйтесь изучать документы администратора Django .

...