2015-02-17 3 views
0

У меня есть некоторые проблемы с пониманием Django Rest Framework. Я создаю приложение, очень простое. И по какой-то причине я не понимаю, что я не могу заставить его работать должным образом.django rest framework вложенные отношения -

Я использую:

  • питон: 3.4.0
  • Джанго: 1.7.4
  • Джанго Rest Framework: 3.0.5

Вот вещь:

#models.py 
class Country(StandardMetadata, GeoBase): 
    CONTINENT_CHOICES = (
     ('OC', 'Oceania'), 
     ('EU', 'Europe'), 
     ('AF', 'Africa'), 
     ('NA', 'North America'), 
     ('AN', 'Antarctica'), 
     ('SA', 'South America'), 
     ('AS', 'Asia'), 
    ) 

    name = models.CharField(max_length=200, db_index=True) 
    slug = AutoSlugField(populate_from='name') 
    continent = models.CharField(max_length=2, choices=CONTINENT_CHOICES, default='NA') 
    iso2 = models.CharField(max_length=2) 
    iso3 = models.CharField(max_length=3) 

    def __str__(self): 
     return self.name 

    class Meta: 
     verbose_name_plural = 'Countries' 


class Region(StandardMetadata, GeoBase): 
    name = models.CharField(max_length=200, db_index=True) 
    slug = AutoSlugField(populate_from='name') 
    iso2 = models.CharField(max_length=2) 

    country = models.ForeignKey(Country) 

    def __str__(self): 
     return self.get_full_name() 

    def get_full_name(self): 
     return ', '.join([self.name, self.country.name]) 

    class Meta: 
     unique_together = ('slug', 'country') 
     verbose_name = 'Region/State/Province' 
     verbose_name_plural = 'Regions/States/Provinces' 


#serializers.py 
class CountrySerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Country 
     fields = ('id', 'name', 'slug', 'iso2', 'iso3', 'continent', 'lng', 'lat') 


class RegionSerializer(serializers.ModelSerializer): 
    country = CountrySerializer(read_only=True, required=True, many=False) 

    class Meta: 
     model = Region 
     fields = ('id', 'name', 'slug', 'iso2', 'lng', 'lat', 'country',) 

#views.py 
class CountryViewSet(viewsets.ModelViewSet): 
    queryset = Country.objects.all() 
    serializer_class = CountrySerializer 


class RegionViewSet(viewsets.ModelViewSet): 
    queryset = Region.objects.all() 
    serializer_class = RegionSerializer 

#urls.py 
router = routers.DefaultRouter() 
router.register(r'countries', CountryViewSet) 
router.register(r'regions', RegionViewSet) 

Так что по какой-то причине я получил эту ошибку, когда пытаюсь чтобы получить доступ к этому URL (http://192.168.33.30:5000/regions/): не может установить как read_only и required

Что мне не хватает?

Большое спасибо за помощь!

EDIT

Я нашел одну из моих проблем. Я удалил линию unique_together = ('slug', 'country') в моем Регион модель. Я установил поле как уникальное. Вторая проблема заключается в том, что мне пришлось сломать мою модель, чтобы она работала.

+0

не решение уже было описано в сообщении об ошибке? –

ответ

0

Вместо указать только для чтения в Serializer, сделайте следующее:

class RegionSerializer(serializers.ModelSerializer): 
    country = CountrySerializer(required=True, many=False) 

    class Meta: 
     model = Region 
     fields = ('id', 'name', 'slug', 'iso2', 'lng', 'lat', 'country',) 
     read_only_fields = ('country',) 
+0

Я следил за вашими предложениями, но проблема остается. – Kornikopic

Смежные вопросы