Django Rest Framework slug_field error

2024/10/12 12:23:29

I have this serializer and model. I want to show in my API the field username of User model, but I receive this error.

AttributeError at /api/v1/client_share_requests/1/

'Profile' object has no attribute 'username'

serializers.py

class ClientShareRequestSerializer(serializers.ModelSerializer):checked_by = serializers.SlugRelatedField(many=True,queryset=Profile.objects.all(),slug_field='username')class Meta:model = ClientShareRequestfields = ('checked_by')

models.py

  class Profile(models.Model):user = models.OneToOneField(User, related_name='profile')class ClientShareRequest(models.Model):checked_by = models.ManyToManyField(Profile, blank=True,related_name='checked_by')

I try to access the User model instance like this:

   checked_by = serializers.SlugRelatedField(many=True,queryset=Profile.objects.all(),slug_field='user.username')

but I receive this error:

'Profile' object has no attribute 'user.username'

Thanks for helping. (Sorry for my English :P)

Answer

My guess is DRF does not allow nested attribute lookups on SlugRelatedFields. Simple workaround would be to add a username property on the Profile model and use this in the serializer:

class Profile(models.Model):user = models.OneToOneField(User, related_name='profile')@propertydef username(self): return self.user.usernameclass ClientShareRequest(models.Model):checked_by = models.ManyToManyField(Profile, blank=True,related_name='checked_by')class ClientShareRequestSerializer(serializers.ModelSerializer):checked_by = serializers.SlugRelatedField(many=True,read_only=True,slug_field='username')class Meta:model = ClientShareRequestfields = ('checked_by', )

This works for reads :)

https://en.xdnf.cn/q/118201.html

Related Q&A

Django - 500 internal server error no module named django

django return 500 internal server error (apache 2.4.10, ubuntu 15.04, django 1.9.6)apache log:[wsgi:warn] mod_wsgi: Compiled for Python/3.4.2. [wsgi:warn] mod_wsgi: Runtime using Python/3.4.3. [mpm_eve…

Unable to connect to Google Bigtable using HBase REST api

Following this example, running the test script "python put_get_with_client.py" results in a 400 error (Bad Request).Bad requestjava.lang.ClassCastException: org.apache.hadoop.hbase.client.Bi…

HTML form button to run PHP to execute Python script

I am building an HTML document that is meant to run locally. On it is a button that I would like to have run a Python script when clicked. Im trying to use a PHP-generated button. Theres no input or ou…

Python - finding time slots

I am writing a small Python script to find time available slots based off calendar appointments. I was able to reuse the code on the post here: (Python - Algorithm find time slots).It does seem to wor…

ReportLab - error when creating a table

This is the first time Ive used ReportLab, I have tried to edit an existing script that does exactly what I want to do, but I get the following error, when I try and run the script.Script - import os, …

Secure login with Python credentials from user database

I like to create a secure login with Python but need to check the user table from a database, so that multiple users can log in with their own password. Mainly like this, works like a charm but not sec…

count number of names in list in python [duplicate]

This question already has answers here:How to count the frequency of the elements in an unordered list? [duplicate](33 answers)Closed 6 years ago.i have one list wich has names in it:names = [test,hal…

tensorflow logits and labels must be same size

Im quite new to tensorflow and python, and currently trying to modify the MNIST for expert tutorial for a 240x320x3 image. I have 2 .py scripttfrecord_reeader.pyimport tensorflow as tf import numpy as…

How to call an action when a button is clicked in Tkinter

I am experimenting with Tkinter for the first time, and am trying to call a function when a button is clicked. This is part of my code. mt is referring to a label that I have made dynamic by attachin…

Access range of elements from an array Python

Considering the following dataset:>>> data[:10] array([(T, 2, 8, 3, 5, 1, 8, 13, 0, 6, 6, 10, 8, 0, 8, 0, 8),(I, 5, 12, 3, 7, 2, 10, 5, 5, 4, 13, 3, 9, 2, 8, 4, 10),(D, 4, 11, …