【问题标题】:Generic relation in Django restDjango rest中的通用关系
【发布时间】:2019-03-08 07:28:42
【问题描述】:

问题

我想用地址创建学生。我怎样才能在 Django 中编写 REST API。

地址和学生

class Address(models.Model):
    address = models.CharField(max_length=100, null=False, blank=False)
    land_mark = models.CharField(max_length=100, null=True, blank=True)
    city = models.CharField(max_length=100, null=True, blank=True)
    state = models.CharField(max_length=100, null=True, blank=True)
    pin_code = models.CharField(max_length=100, null=True, blank=True)
    latitude = models.FloatField(default=0.0)
    longitude = models.FloatField(default=0.0)
    geo_code = models.CharField(max_length=100, null=True, blank=True)
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE, 
                                    null=True)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')

 class Student(models.Model):
    name = model.CharField(max_length=100, null=False, blank=False)
    address = GenericRelation(Address)
    def __str__(self):
        return self.name

序列化器

class AddressSerializer(serializers.ModelSerializer):
    class Meta:
        model = Address
        fields = "__all__"


 class StuddentSerializer(serializers.ModelSerializer):
       class Meta:
            model = Student
            fields = "__all__"

API 视图

class AddressApiView(ListCreateAPIView):
    queryset = Address.objects.all()
    serializer_class = AddressSerializer

 class StudentApiView(ListCreateAPIView):
    queryset = Student.objects.all()
    serializer_class = StuddentSerializer

如何获取我的创建/查看学生?

【问题讨论】:

    标签: django django-models django-rest-framework django-views django-generic-relations


    【解决方案1】:

    你可以试试第三方应用rest-framework-generic-relationlink

    【讨论】:

    • 是的,我试过了,但我想为学生创建 api,而不是像 =github.com/Ian-Foote/rest-framework-generic-relations 示例中提到的地址,我想创建书籍或笔记而不是标签
    • @GauravBole 抱歉,伙计,我没有正确理解您的意思。我的意图是您可能会在这些模型之间寻找moneyTomoneyforeignkey 关系,而不是泛型关系。由于 Student 模型中没有多个外键,你打算如何处理这个泛型关系。
    • 是的@shakil 我明白了你的意思,我将通用外键更改为普通外键现在解决了一个问题谢谢。
    猜你喜欢
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2014-09-22
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    相关资源
    最近更新 更多