Как ограничить количество вариантов ManyToManyField определенным количеством вариантов - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь создать приложение 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 для мобильного приложения.

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

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

Это решение:

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 голосов
/ 25 июня 2019

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

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

...