【问题标题】:django rest framework : Is possible to create a put/patch request without using primary key?django rest 框架:是否可以在不使用主键的情况下创建放置/补丁请求?
【发布时间】:2020-05-15 08:17:37
【问题描述】:

我想从使用 put http 方法获得的数据中更新 2 个字段 is_exempted 和 cmets。而且我可以从http方法获得多个推荐数据。并且模型没有我可以考虑的字段 pk 对于每个 account_id 可以有多个条目。

models.py

class Recommendation(models.Model):
    account             = models.ForeignKey(Accounts, on_delete=models.CASCADE)
    account_name        = models.CharField(max_length=255, blank=True, null=True)
    instance_id         = models.CharField(max_length=255, blank=True, null=True)
    month_year          = models.CharField(max_length=50, blank=True, null=True)    
    instance_type       = models.CharField(max_length=255, blank=True, null=True)
    is_exempted         = models.CharField(max_length=50, default='no', null=False)
    comments            = models.CharField(max_length=255, blank=True, null=True)

序列化器.py

class RecommendationSerializers(serializers.ModelSerializer):

    class Meta:
        model = Recommendation
        fields = ( 'account_id', 'account_name', 'instance_id', 'instance_type', 'is_exempted', 'comments', 'month_year')

views.py

@api_view(['PUT'])
def update_recommendation_data(request):
    output = []
    if request.method == 'PUT':
        if request.data:
            for d in request.data:
                print(d)
                serializer = RecommendationSerializers(data=d, partial=False)
                if serializer.is_valid():
                    serializer.save()
                output.append(serializer.data)
        return Response(data=output, status=status.HTTP_200_OK)
    return Response(data="BAD REQUEST", status=status.HTTP_400_BAD_REQUEST)

urls.py

router = routers.DefaultRouter()
urlpatterns = [url("^", include(router.urls)),
url(r'^updaterecommendation$', views.update_recommendation_data)]

【问题讨论】:

  • 这个视图的 url 路径是什么?
  • 更新了 urls.py
  • 我已经发布了一个答案,它有帮助吗?我错过了什么?请告诉我;D
  • 使用主键我可能知道.. 但我想知道没有主键是否可以执行补丁或放置。因为我将获得不是主键的 account_id,所以我可以获得该 account_id 的所有记录......并且我必须为我将从 request.data 获得的所有数据更新 is_exempted 和 cmets。注意 - account_id、instance_id 和 month_year 可以唯一标识一行。
  • 那么,您的想法是在一个请求中发送多个 Recommendation 对象?

标签: python django http django-rest-framework rest


【解决方案1】:

看看你说的:

并且模型没有我可以考虑的字段 pk 对于每个 account_id 可以有多个条目。

据我了解,您在确定用于单独识别每个建议的密钥时遇到了问题。不过你已经有了这样的钥匙,跟着来吧。

根据Django docs,您的模型已经有一个主键:

会自动添加一个 id 字段,但可以覆盖此行为。见Automatic primary key fields

所以你可以通过发送 Django 自动生成的 id 字段来过滤它。

【讨论】:

    猜你喜欢
    • 2022-01-10
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 2021-07-27
    • 1970-01-01
    • 2010-10-27
    相关资源
    最近更新 更多