【发布时间】:2019-08-02 07:11:06
【问题描述】:
我一直在使用 Django rest 框架来创建 API。在这个 API 中有两个模型 Question 和 Option。 Question 在 Option 中是 Foreign Key。我一直在尝试以一个表单获取所有字段并将数据添加到相应的模型中。
对于一个问题,选项可以与表单提供的一样多。我尝试为已经存在的问题创建选项(即,将在数据库中添加第一个问题,然后选择问题并添加该问题的选项),我认为这不是实用的方法,所以我有一个想法,即在创建问题时需要将选项添加到数据库中。
models.py
class Question(models.Model):
body = RichTextField()
class Option(models.Model):
question = models.ForeignKey(Question, on_delete=CASCADE)
number = models.IntegerField()
option = RichTextField()
is_correct = models.SmallIntegerField()
serializers.py
class QuestionSerializers(serializers.ModelSerializer):
class Meta:
model = Questions
fields = ('id', 'body', 'explanation')
class QuestionReadSerializer(serializers.ModelSerializer):
question = QuestionSerializers()
class Meta:
model = Options
fields = ('question', 'number', 'option', 'is_correct')
class QuestionWriteSerializers(serializers.ModelSerializer):
question = QuestionSerializers()
class Meta:
model = Options
fields = ('question', 'number', 'option', 'is_correct')
@transaction.atomic
def create(self, validated_data):
question_data = validated_data.pop('question')
question = Questions.objects.update_or_create(**question_data)
option = Options.objects.update_or_create(question=question[0], **validated_data)
return option[0]
views.py
class QuestionViewset(viewsets.ModelViewSet):
queryset = Options.objects.all()
def get_serializer_class(self):
if self.request.method == 'POST':
return QuestionWriteSerializers
return QuestionReadSerializers
我正在使用选项模型为特定问题创建新选项,如果问题是新问题,则将创建新问题。但这不是最好的方法。任何帮助都会得到帮助。
【问题讨论】:
标签: django django-models django-rest-framework django-views