Получение неверного запроса на кажущийся действительным запрос Django Rest Framework Post с запросом FK в данных Serializer

Я создаю новый объект SearchNeighborhood и подключаю его к уже созданному объекту SearchCity в запросе POST.

У меня есть следующие модели

class SearchCity(models.Model):
    city = models.CharField(max_length=200)

class SearchNeighborhood(models.Model):
    city = models.ForeignKey(SearchCity, on_delete=models.CASCADE)
    neighborhood = models.CharField(max_length=200)

мой соответствующий сериализатор:

class SearchNeighborhoodSerializer(serializers.ModelSerializer):
    class Meta:
        model = SearchNeighborhood
        fields = ('pk', 'neighborhood')

мой взгляд и соответствующий метод:

class CityNeighborhoodsListCreate(APIView):
 def post(self, request, *args, **kwargs):
        citypk = kwargs.get('citypk', None)
        city=get_object_or_404(SearchCity,pk=citypk)
        serialized = SearchNeighborhoodSerializer(data=request.data)
        if serialized.is_valid(raise_exception=True):
            validatedData = serialized.validated_data
            neighborhood = validatedData.get('neighborhood')
            neighborhoodobject = SearchNeighborhood(neighborhood= neighborhood, city = city)
            neighborhoodobject.save()
            createdneighborhood = SearchNeighborhoodSerializer(neighborhoodobject)
            return Response({
                'neighborhood': createdneighborhood.data
            })

Я использую Ангуляр 4

мой AJAX запрос:

addneighborhood(){
     const payload = {
       neighborhood: this.addneighborhoodform.form.value.addneighborhoodinput
     };
     this.suitsettingsservice.addneighborhood(payload)
       .subscribe(
         (req: any)=>{
             this.selectedcityneighborhoods.push(req);
         });

ошибка, которую я получаю:

HttpErrorResponse {headers: HttpHeaders, status: 400, statusText: "Bad Request", url: "http://127.0.0.1:8000/api/suitsadmin/settings/neighborhoodbycity", ok: false, …}
error:city :  "This field is required."

Он говорит, что требуется объект города. но я не прошу об этом в сериализаторе. Я не уверен, что я делаю неправильно.

редактировать: я попытался исправить, рекомендованное в этом сообщении: unique">Django REST Framework: это поле обязательно для заполнения. с required=False и unique_together

передачи объекта города в сериализатор

  def post(self, request, *args, **kwargs):
        citypk = kwargs.get('citypk', None)
        city=get_object_or_404(SearchCity,pk=citypk)
        serialized = SearchNeighborhoodSerializer(city,data=request.data)

город передан в сериализатор выше

но это ничего не изменило

редактировать:

Я попытался установить поле города сериализаторов только для чтения. Но и это не помогло

Спасибо за помощь.


person amazing carrot soup    schedule 03.03.2018    source источник


Ответы (1)


Снова отвечаю на свой вопрос

это в моем AJAX

Я включаю поле соседства в json, но не город. чтобы удовлетворить serailizer, я должен заполнить это поле

addneighborhood(){
     const payload = {
       city: this.selectedcityname,
       neighborhood: this.addneighborhoodform.form.value.addneighborhoodinput
     };
     this.suitsettingsservice.addneighborhood(payload)
       .subscribe(
         (req: any)=>{
             this.selectedcityneighborhoods.push(req);
         });
person amazing carrot soup    schedule 03.03.2018
comment
ДАСССС спасибо! У меня была такая же проблема с моим приложением API - сериализатор django имел ввод «имя пользователя», а в ответ это было «имя пользователя». - person W.Doch; 06.01.2021