【发布时间】:2018-09-13 00:10:30
【问题描述】:
我有一个具有多对多连接的模型。我想让这个模型在 Django REST 中可用。默认情况下,这样的模型是只读的,但我也想写。此外,将直通连接的信息作为嵌套模型集成到 GET 中会很棒。
...
class KeyDateCase(models.Model):
...
diagnoses_all_icd_10 = models.ManyToManyField(
'ICD10', through='CaseICD10Connection')
...
class CaseICD10Connection(models.Model):
case = models.ForeignKey('KeyDateCase', on_delete=models.CASCADE)
icd_10 = models.ForeignKey('ICD10', on_delete=models.CASCADE)
is_primary = models.BooleanField(default = False)
certainty = models.CharField(
max_length=1,
choices=CERTAINTY_CHOICES,
default='G',
)
class ICD10(models.Model):
primary_key_number = models.CharField(max_length=10, primary_key=True)
star_key_number = models.CharField(max_length=10, blank=True, null=True)
additional_key_number = models.CharField(
max_length=10, blank=True, null=True)
preferred_short_description = models.CharField(max_length=128, )
...
class KeyDateCaseViewSet(viewsets.ModelViewSet):
???
class KeyDateCaseSerializer(serializers.ModelSerializer):
???
我怎样才能做到这一点?我的视图和序列化程序应该是什么样的?
【问题讨论】:
-
你想如何显示
diagnoses_all_icd_10,是ids列表还是你想显示整个对象? -
diagnoses_all_icd_10 = serializers.PrimaryKeyRelatedField( many=True, queryset= ICD10.objects.all(), write_only=True, required=False)你可以定义类似的东西,你必须重写序列化程序创建方法并从验证数据中弹出 id,例如 icd_10 = valid_data.pop('diagnoses_all_icd_10')然后将其添加到 icd_10 中 icd 的模型实例```:instance.diagnoses_all_icd_10.add(ICD10.objects.get(pk=icd_10))``` -
我建议在使用
manytomanyfield时使用views.py中的类,您可以查看inlineformset_factory中的forms.py以及jquery-formset中的前端。
标签: django rest django-rest-framework