Как ограничить количество вариантов ManyToManyField определенным количеством вариантов

Я пытаюсь создать приложение Django с несколькими вариантами ответов. У меня есть модель с именем Answer, а другая модель с именем Question.

Вот содержимое Answer:

class Answer(models.Model):
    text = models.CharField(max_length=255)

, и это Question:

class Question(models.Model):
    text = models.CharField(max_length=255)
    correct_answer = models.ForeignKey('Answer', on_delete=models.CASCADE, related_name='correct_answers')
    other_answers = models.ManyToManyField('Answer')

Я хочу ограничить количество вариантов other_answers в django-admin только на 3 ответа. Как это сделать?

Примечания:

  1. Я в порядке с повторным моделированием моих моделей.
  2. Я не буду использовать django-forms, я только создаю API для мобильного приложения.
0
задан Ambitions 28 June 2019 в 06:28
поделиться

2 ответа

Если вы хотите ограничить его тремя конкретными ответами, я думаю, вы можете использовать limit_choices_to

Если вы хотите ограничить его максимум 3, тогда вам следует использовать Валидация модели Джанго

0
ответ дан Geoff Walmsley 28 June 2019 в 06:28
поделиться

Спасибо за ответ Джеффа Уолмсли , который вдохновил меня на правильный ответ.

Это решение:

admin.py :

from django.contrib import admin
from django.core.exceptions import ValidationError
from .models import Question
from django import forms


class QuestionForm(forms.ModelForm):
    model = Question

    def clean(self):
        cleaned_data = super().clean()
        if cleaned_data.get('other_answers').count() != 3:
            raise ValidationError('You have to choose exactly 3 answers for the field Other Answers!')


@admin.register(Question)
class QuestionAdmin(admin.ModelAdmin):
    form = QuestionForm
0
ответ дан Ambitions 28 June 2019 в 06:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: