如何将 url id 设置为特定字段 django

jbiz

我正在寻找为用户创建一个模型来为食谱添加书签。我有以下内容,其中配方值通过 POST 请求传递:

模型.py

class PublishedRecipeBookmark(models.Model):
    recipe = models.ForeignKey(
        PublishedRecipe, on_delete=models.PROTECT, related_name="bookmarks"
    )
    bookmarked_by = models.ForeignKey(User, on_delete=models.PROTECT)
    bookmarked_at = models.DateTimeField(auto_now_add=True)

序列化程序.py

class PublishedRecipeBookmarkSerializer(serializers.ModelSerializer):
    bookmarked_by = UserSerializer(read_only=True)

    class Meta:
        model = models.PublishedRecipeBookmark
        fields = ["recipe", "bookmarked_by", "bookmarked_at"]

    def create(self, validated_data):
        request = self.context["request"]
        ModelClass = self.Meta.model

        instance = ModelClass.objects.create(
            **validated_data, **{"bookmarked_by": request.user}
        )
        return instance

视图.py

@permission_classes([IsAuthenticated])
class PublishedRecipeBookmarkView(generics.CreateAPIView):
    queryset = models.PublishedRecipeBookmark.objects.all()
    serializer_class = PublishedRecipeBookmarkSerializer

网址.py

path("published-recipes/bookmarks", PublishedRecipeBookmarkView.as_view()),  

我想将 url 更改为这样的内容,以便通过 url (int:id) 传递 recipeid。

网址.py

path("published-recipes/bookmarks/<int:id>", PublishedRecipeBookmarkView.as_view()),

如何实现这一点,以便视图将 id 识别为 PublishedRecipe 的 recipeid(在模型中建立了外键关系)?

更新,因为这是一个不同的问题,上面已经回答了。

女主播

正如您当前的序列化程序所期望的那样,将配方 ID 放在请求正文中会更有意义。

作为约定:

published-recipes/bookmarks/<int:id>

id 这里将对应于书签 id,并将其视为配方 id 将 IMO 是不好的做法,并且会混淆将使用此代码的其他人。

但是,如果您确定并且确实想要这样做,则可以覆盖视图的create方法:

@permission_classes([IsAuthenticated])
class PublishedRecipeBookmarkView(generics.CreateAPIView):
    queryset = models.PublishedRecipeBookmark.objects.all()
    serializer_class = PublishedRecipeBookmarkSerializer

    def create(self, request, id, *args, **kwargs):
        ... # do what you want with id here

或从kwargs

    def create(self, request, *args, **kwargs):
        id = kwargs.get('id')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将 url 打印到我的 django 表单的 order id 字段?

如何将 URL 设置为与 Django 中的表单相同的位置?

如何将slug字段中的url发送到Django中的url中

如何在django中将id标签设置为等于URL名称

Django REST Framework(DRF):将当前用户ID设置为字段值

如何将所有ForeignKey和OneToOneField字段设置为raw_id_fields

如何将Django Choices表单字段的默认值设置为None

在Django表单中,如何将字段设置为只读(或禁用)以便无法对其进行编辑?

如何将Django模型日期字段的默认值设置为将来的日期?

如何将模型字段的值设置为当前登录的用户?Django的

如何将特定书籍的bookinstance.id传递到Django中基于函数的视图?

在此代码中,如何将来自 URL 的 ID 与数据库中的 ID 进行比较,然后将数据显示为该特定 ID

如何将布尔数组的特定字段设置为 false

使用 ADFS 成功登录后,如何将重定向 URL 设置为特定域?

如何将特定工作表中 A1 范围内的 URL 设置为变量?

将多个ID传递给url Django

如何将 Django 模型布尔字段更新为 true?

如何将 id 属性设置为表?

如何将baseController对象ID设置为outputcache的键

如何将帖子的ID设置为其标题

如何将navbarText设置为URL或可单击的按钮

如何将背景图像设置为 blob url

如何将jQuery变量设置为Django模板变量

如何将URL下载为文件?

如何将ID动态传递给Bootstrap验证程序规则的URL:远程输入同一表单输入字段?

如何将 ID 更改为 url slug

如何将 id 传递到模板 url

在模板中循环模型时,如何将唯一 id 字段从模型传递到 Django 表单?

如何将图像 url 转换为 ImageField - Django