簡體   English   中英

如何自動將登錄用戶分配給 Django Rest 框架中的帖子?

[英]How to assign a logged in user automatically to a post In Django Rest framework?

我創建了一個模型來發布廣告。 由於 CreateApiView 受到保護,因此只有登錄用戶才能創建或發布廣告,但如果登錄用戶發布廣告,如何自動獲取登錄用戶名或將該用戶分配給他的廣告?

這是我在視圖集中嘗試過的

def perform_create(self, serializer):
    return serializer.save(owner=self.request.user)

這是我的models.py

class Add(models.Model):
CATEGORY_CHOICES = (
    (1, 'Khashi'),
    (2, 'Boka'),
    (3, 'Goat'),
    (4, 'Chyangra'),
    (5, 'Veda'),
)
user = models.ForeignKey(User, on_delete = models.CASCADE)
title = models.CharField(("Title"), max_length=50)
category = models.IntegerField(("Choose Category"), choices=CATEGORY_CHOICES)
Short_discription = models.CharField(("Short Discription"), max_length=200)

這是我的 serializers.py

class KhashiSerializer(serializers.ModelSerializer):
    class Meta:
        model = Add
        fields = '__all__'
        read_only_fields = ['user']

這是我的觀點

class KhashiCreateApiView(generics.CreateAPIView):
    queryset = Add.objects.all()
    serializer_class = KhashiSerializer

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

我在此端點上收到此錯誤http://127.0.0.1:8000/api/khashi/khashi_add

OperationalError at /api/khashi/khashi_add
table add_khashi_add has no column named user_id

有什么方法可以將用戶分配給帖子,以便如果 Postman 中的 POST 請求在沒有user提供的情況下將自動分配登錄用戶或具有授權標頭中提供的令牌的用戶?

好的,我自己弄清楚...。我只是使用validate方法更新了serializers.py

class KhashiSerializer(serializers.ModelSerializer):
class Meta:
    model = Add
    fields = '__all__'
    read_only_fields = ['user']

def validate(self, attrs):
    attrs['user'] = self.context['request'].user
    return attrs

你在你的原始帖子中有它:在視圖集中覆蓋perform_create為我自動將登錄用戶添加到對象中工作:

def perform_create(self, serializer):
    return serializer.save(owner=self.request.user)

看起來您遇到了一個單獨的問題,即您的表中不存在 user_id 列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM