Django在序列化程序上创建约束

Django在序列化程序上创建约束,django,django-models,django-rest-framework,Django,Django Models,Django Rest Framework,我正在尝试扩展Django的民意测验应用程序。每个投票将有两个选择,每个选择一个图像或每个选择一种颜色,但不能两者兼而有之。我的模型是这样的: class Question(models.Model): question = models.CharField() created_at = models.DateTimeField(auto_now_add=True) class Choice(models.Model): question =

我正在尝试扩展Django的民意测验应用程序。每个投票将有两个选择,每个选择一个图像或每个选择一种颜色,但不能两者兼而有之。我的模型是这样的:

class Question(models.Model):
      question = models.CharField()
      created_at      = models.DateTimeField(auto_now_add=True)

class Choice(models.Model):
      question    = models.ForeignKey(Question, on_delete=models.CASCADE)
      choice      = models.CharField(max_length=120)
      vote_count  = models.IntegerField(default=0)

class ChoiceImage(models.Model):
    choice = models.OneToOneField(Choice, on_delete=models.CASCADE)
    img    = models.ImageField()

class ChoiceColor(models.Model):
    choice = models.OneToOneField(Choice, on_delete=models.CASCADE)
    color  = models.CharField(max_length=7)
    class CreateQuestionView(CreateAPIView):
        serializer_class = CreateQuestionSerializer
我有这样一个观点:

class Question(models.Model):
      question = models.CharField()
      created_at      = models.DateTimeField(auto_now_add=True)

class Choice(models.Model):
      question    = models.ForeignKey(Question, on_delete=models.CASCADE)
      choice      = models.CharField(max_length=120)
      vote_count  = models.IntegerField(default=0)

class ChoiceImage(models.Model):
    choice = models.OneToOneField(Choice, on_delete=models.CASCADE)
    img    = models.ImageField()

class ChoiceColor(models.Model):
    choice = models.OneToOneField(Choice, on_delete=models.CASCADE)
    color  = models.CharField(max_length=7)
    class CreateQuestionView(CreateAPIView):
        serializer_class = CreateQuestionSerializer
使用以下序列化程序:

class ChoiceImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = ChoiceImage
        fields = ('image',)

class ChoiceColorSerializer(serializers.ModelSerializer):
    class Meta:
        model = ChoiceColor
        fields = ('color',)

class ChoiceSerializer(serializers.ModelSerializer):
    choice_image = ChoiceImageSerializer(many=False)
    choice_color = ChoiceColorSerializer(many=False)

    class Meta:
        model = Choice
        fields = ('choice', 'choice_image', 'choice_color')


class CreateQuestionSerializer(serializers.ModelSerializer):
    choices = ChoiceSerializer(many=True)

    class Meta:
        model = Question
        fields = ('question', 'choices')

如何在序列化程序上创建此约束?还有,我是在有效地设计它,还是有更好的方法来实现这一点?

在模型级别定义验证不是更有意义吗?如果某个值通过序列化程序传递,而不是通过表单传递,那将是相当奇怪的。@WillemVanOnsem-Hmm,你是对的,但是,我对我的设计非常困惑……我是在设计我想要正确实现的东西,还是有一种更有效的方法来创建它,而不是使用嵌套关系?