2013-03-18 2 views
0

Используя django-rest-framework, можно получить содержимое из соответствующего поля. Так, например, я хочу создать список жанров, содержащий все проекты внутри него. Это то, что я имею, но я продолжаю получать сообщение об ошибке:Извлечение связанных полей рамки Django

'Genre' object has no attribute 'project_set'

models.py

class Genre(models.Model): 
    name = models.CharField(max_length=100, db_index=True) 

class Project(models.Model): 
    title = models.CharField(max_length=100, unique=True) 
    genres = models.ManyToManyField(Genre, related_name='genres') 

serializers.py

class GenreSerializer(serializers.ModelSerializer):  
    project_set = serializers.ManyRelatedField() 

    class Meta: 
     model = Genre 
     fields = ('name', 'project_set') 

ответ

3

Родственный имя вы используете на Project класс плохо назван. Это связанное имя - это то, как вы получаете доступ к набору проектов, связанных с конкретным экземпляром жанра. Поэтому вы должны использовать что-то вроде related_name='projects'. (Так как это у вас есть неправильный путь.)

Затем убедитесь, что ваш класс сериализатора совпадает с соответствующим именем, которое вы используете, поэтому в обоих случаях project_set должен быть вместо projects.

(В качестве альтернативы вы можете просто удалить related_name='genres' целиком, и все будет работать, как вы ожидали, что related_name по умолчанию будет 'project_set'.)