【问题标题】:Displaying foreign key with DRF create api使用 DRF create api 显示外键
【发布时间】:2019-12-22 15:56:33
【问题描述】:

正确显示外键

我在 DRF 中有 2 个模型:

class Location(models.Model):
    country = models.CharField(max_length=50, null=False)
    city = models.CharField(max_length=50, null=False)
    currency = models.CharField(max_length=20, null=False)

    def save(self, *args, **kwargs):
        super(Location, self).save(*args, **kwargs)

    class Meta:
        unique_together = ('country', 'city', )
        permissions = (
                ('can_view', 'Can View'),
                ('can_modify', 'Can Modify'),
        )

    def __str__(self):
        return (self.country + ":" + self.city)
class Holiday(models.Model):
    country = models.ForeignKey(Location, related_name='location_country', on_delete='CASCADE')
    city = models.ForeignKey(Location, related_name='location_city', on_delete='CASCADE')
    holiday_date = models.DateField(auto_now=False, auto_now_add=False)

    def save(self, *args, **kwargs):
        super(Holiday, self).save(*args, **kwargs)

    def __str__(self):
        return (self.country + ":" + self.city + ":" + self.holiday_date)

    class Meta:
        unique_together = ('country', 'city', 'holiday_date')

当尝试创建假期(通过 api 在浏览器中)时,对于国家和城市字段,我得到如下下拉列表:

国家:国家名称:城市名称

城市:国家名称:城市名称

我想正确显示这些字段,以便正确显示国家和城市字段。

我知道当前的输出是由于 Location 模型中的 str 定义,我需要它来在 django admin 中显示表格字段。

如何仅为 Create API 视图(或我以后可能创建的所有其他视图)覆盖这些。

以下是我正在使用的创建 API:

class HolidayCreateView(generics.CreateAPIView):
    serializer_class = HolidayCreateSerializer

    def create(self, request, *args, **kwargs):
        return super().create(request, *args, **kwargs)
class HolidayCreateSerializer(serializers.ModelSerializer):

    class Meta:
        model = Holiday
        fields = ('id', 'country', 'city', 'holiday_date')

【问题讨论】:

    标签: django django-rest-framework foreign-keys


    【解决方案1】:

    好的,我想我创建了一个错误的模型。 如果我解决了上述问题,我将必须确保没有人在不存在的位置(即国家-城市组合)上创建假期。

    我通过修正模型本身解决了上述问题: 和改变

    class Holiday(models.Model):
        location = models.ForeignKey(Location, related_name='location', on_delete='CASCADE')
        holiday_date = models.DateField(auto_now=False, auto_now_add=False)
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多