如何将 ManyToManyField 的选择数量限制为特定数量的选择

How to limit number of choices of a ManyToManyField to a specific number of choices

我正在尝试构建一个多项选择测验 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')

我想将 django-adminother_answers 的选项数量限制为 3 个答案。怎么做?

备注:

  1. 我可以重新建模我的模型。
  2. 我不会使用 django-forms,我只是在为移动应用构建 API。

如果您想将其限制为 3 个具体答案,我想您可以使用 limit_choices_to

如果你只想将它限制为最多 3,那么你应该使用 django model validation

感谢 Geoff Walmsley 的回答,启发了我的正确答案。

这是解决方案:

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