【问题标题】:How to use django api with foreignkey如何使用带有外键的 django api
【发布时间】:2019-03-07 09:49:14
【问题描述】:

我尝试在 django restframework 序列化程序中保存外键。

我的目标是从 iframely.com 保存数据库信息,这部分效果很好。但我还需要将其保存在特定类别中。添加字段“Board(我的类别名称字段)”后出现错误:“board_id”列中的空值违反非空约束

我的模特:

class Embed(models.Model):
    url = models.URLField(max_length=255)
    title = models.CharField(max_length=255)
    description = models.TextField()
    thumbnail_url = models.URLField(max_length=255)
    html = models.TextField()
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    board = models.ForeignKey(Board, on_delete=models.CASCADE, verbose_name='Kategoria')

表格:

class SubmitEmbed(forms.Form):
    url = forms.URLField()
    board = forms.ModelChoiceField(queryset=Board.objects.all())

序列化器:

class EmbedSerializer(serializers.ModelSerializer):
    author = serializers.HiddenField(default=serializers.CurrentUserDefault())
    board = serializers.RelatedField(read_only=True)

    class Meta:
        model = Embed
        fields = '__all__'

查看:

def save_embed(request):

    if request.method == "POST":
        form = SubmitEmbed(request.POST)
        if form.is_valid():
            url = form.cleaned_data['url']
            r = requests.get('http://iframe.ly/api/oembed?url=' + url + '&key=' + settings.IFRAMELY_KEY)
            json = r.json()
            serializer = EmbedSerializer(data=json, context={'request': request})
            if serializer.is_valid():
                embed = serializer.save()
                return render(request, 'embed/embeds.html', {'embed': embed})
    else:
        form = SubmitEmbed()

    return render(request, 'embed/embedadd.html', {'form': form})

【问题讨论】:

  • 您的request 中有Board instance 吗?

标签: django django-rest-framework django-forms django-views


【解决方案1】:

因为你有

class EmbedSerializer(serializers.ModelSerializer):
    author = serializers.HiddenField(default=serializers.CurrentUserDefault())
    board = serializers.RelatedField(read_only=True)

您已将董事会设置为read_only。当提供此字段并进行 DRF 验证时,DRF 将删除此字段。

您可以删除整行,它会起作用。

【讨论】:

  • 仍有错误:“board_id”列中的空值违反非空约束。我不知道如何在嵌入模型中分配板列表选择。在管理工作中很好,但在前端不是。我第一次尝试使用 django rest 框架构建一些东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
  • 2010-11-15
相关资源
最近更新 更多