как передать `id` и` object` в службу angular - PullRequest
0 голосов
/ 18 апреля 2020

Angular 8, Django 3. На сервере я использую generics.RetrieveUpdateDestroyAPIView. На стороне Angular у меня есть служба, которая использует поле id, взятое из ActivatedRoute, для поиска модели Restaurant. Все это прекрасно работает.

Что я хочу сделать, это после того, как я внес изменения в модель, я хочу отправить эти обновления в представление RetrieveUpdateDestroyAPIView. Но я не знаю, как передать как новый Restaurant объект (initial_restaurant), так и параметр id, поэтому RetrieveUpdateDestroyAPIView знает, какой Restaurant обновить ...

Я думаю, что я буду определенно нужно создать другую сервисную функцию, которая является http.post или http.patch, но я не знаю, как одновременно отправить id в urls.py и объект одновременно ..

DjangoView

class RestaurantEdit(generics.RetrieveUpdateDestroyAPIView):
    serializer_class = RestaurantEditSerializer
    queryset = Restaurant.objects.all()

RestaurantEditComponent

  initial_restaurant: RestaurantEdit
  id:string

  ngOnInit() {
    this.id = this.route.snapshot.paramMap.get('id')
    this.get_restaurant(this.id)
    console.log(this.initial_restaurant)
  }

  get_restaurant(id){
    this.restaurantservice.restaurantedit(id).subscribe(restaurant => this.initial_restaurant = restaurant)
  }

  savechanges(id, initial_restaurant){
    this.restaurantservice.restaurantedit(id, initial_restaurant).subscribe()
  }

}

- я попытался передать две переменные, но это определенно не правильно ..

html

<p>Edit Restaurant </p>
<div *ngIf = "initial_restaurant">
    <input type="text"  id="name" required 
    [(ngModel)]="initial_restaurant.name" /><br>
    <input type="text"  id="food" required 
    [(ngModel)]="initial_restaurant.food" /><br>
    <button (click)="savechanges(initial_restaurant)">Save Changes</button>
</div>

сервис

restaurantedit(id): Observable<Restaurant>{
  return this.http.get<Restaurant>(this.restauranteditUrl+'/'+id)
}

urls.py

urlpatterns = [
    path(r'restaurantedit/<int:pk>', RestaurantEdit.as_view(), name='restaurantedit')
    ]

1 Ответ

0 голосов
/ 18 апреля 2020

Я незнаком с Django, но, похоже, проблема, вероятно, в методе обслуживания, который вы вызываете. Здесь у вас есть метод, принимающий только идентификатор

restaurantedit(id): Observable<Restaurant>{
  return this.http.get<Restaurant>(this.restauranteditUrl+'/'+id)
}

Но когда вы вызываете его, вы передаете его обоим элементам

  savechanges(id, initial_restaurant){
     this.restaurantservice.restaurantedit(id, initial_restaurant).subscribe()
  }

То, что вы, вероятно, хотите сделать, это настроить ожидаемый метод 2 параметра и включают объект initial_restraurant в теле сообщения и используют идентификатор в качестве параметра маршрута для контроллера.

что-то вроде

 restaurantedit(id, restaurant): Observable<Restaurant>{
   return this.http.post<Restaurant>(this.restauranteditUrl+'/'+id, restaurant)
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...