Django在序列化程序上创建约束
我正在尝试扩展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 =
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,你是对的,但是,我对我的设计非常困惑……我是在设计我想要正确实现的东西,还是有一种更有效的方法来创建它,而不是使用嵌套关系?