0
APIを使用してポストして、モデルムービーに新しいエントリを作成しています。ヘッダーを使用してPOSTを実行して、OWNERが投稿したユーザーであるようにしたいと考えています。ユーザートークンはヘッダー経由で送信されます。ヘッダからのトークンを使用したポストAPI
models.py
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_auth_token(sender, instance=None, created=False, **kwargs):
if created:
Token.objects.create(user=instance)
class Movie(models.Model):
title = models.CharField("Title", max_length=10000, blank=True)
tag = models.ManyToManyField('Tag', blank=True)
created = models.DateTimeField("Created", auto_now_add=True)
owner = models.ForeignKey('auth.User', blank=True, null=True)
Views.py
class OwnerFilterBackend(filters.BaseFilterBackend):
def filter_queryset(self, request, queryset, view):
return queryset.filter(owner=request.user)
class AllViewSet(viewsets.ModelViewSet):
filter_backends = (OwnerFilterBackend,)
queryset = Movie.objects.order_by('-created',).exclude(deleted=True).exclude(typetask=2)
serializer_class = AllSerializer
Serializers.py
あなたが設定することができますclass AllSerializer(serializers.ModelSerializer):
tag = TagSerializer(many=True, read_only=True)
class Meta:
model = Movie
fields = ('title', 'mail', 'pk', 'tag', 'info', 'created', 'deleted', 'status', 'typetask')
def create(self, validated_data):
tags_data = validated_data.pop('tag')
movie = Movie.objects.create(**validated_data)
for tag_data in tags_data:
tag_qs = Tag.objects.filter(name__iexact=tag_data['name'])
if tag_qs.exists():
tag = tag_qs.first()
else:
tag = Tag.objects.create(**tag_data)
task.tag.add(tag)
return movie
これは機能しませんでした。私は何かを輸入する必要がありますか?私はgenericAPIViewsを使用していません。私は標準のシリアライザを使っています。私はPDBを使って 'self.request'をデバッグしました*** AttributeError: 'TaskSerializer'オブジェクトに属性 'request'がありません – Ycon
@Ycon' self.request'とはどういう意味ですか?それは 'self.context ['request']'でなければなりません。 –
あなたは正しいです。だから 'self.context ['request']'は私に ''を返します。私は '.__ dict__'を使って内部を見ました。そして、私はトークンオブジェクトを含んでいます。しかし、それは私のフィールドには届かない。 –
Ycon