Django Rest Api - Dapatkan dan Posting Permintaan dalam Sekali Jalan - Posting Permintaan berdasarkan Hasil Dapatkan

Saya memiliki persyaratan di bawah ini untuk mencapainya menggunakan Django Rest Framework. Saya perlu menangani permintaan POST ke Model 2 dalam permintaan Dapatkan Model 3

Saya punya dua model, hanya menyimpan beberapa kolom

model.py

class Customers(models.Model):  #original customers data are stored here 
    customer_id = models.BigIntegerField(db_column='customer_id', primary_key=True)  
    customer_name = models.CharField(db_column='Customer_name', blank=True, null=True, max_length=50)  

class Customers_In_Use(models.Model):  #where we will track the locking of customers  data once they get used
    customer_id = models.OneToOneField(Customers_Master, to_field='customer_id', on_delete=models.DO_NOTHING, related_name='rel_customer')  
    comments = models.TextField(blank=True,null=True)

satu tampilan basis data.

Customers_View(models.Model): 
    customer_id = models.BigIntegerField()
    customer_name = models.CharField()
    in_use = models.CharField(blank=True)

    class Meta:
        managed = False

Tampilan ini dibangun di backend seperti di bawah ini

Select 
 C.customer_id, 
 C.customer_name, 
 CASE WHEN U.customer_id_id IS NULL THEN 'No' ELSE 'Yes' END AS In_Use,
from Customers C
left join
Customers_In_Use U
on C.customer_id=U.customer_id_id

Di Django Rest Api saya, saya mengekspos data berdasarkan Customers_View (permintaan GET)

Saya memiliki permintaan POST ke Customers_In_Use yang akan menerima customer_id dan komentar dalam format json.

Example Data on Customers_View:
customer_id,Customer_name,in_use
123,John,No
456,Smith,No
789,John,No
987,Tom,Yes  #Yes means this customer data is already in use 
567,Tom,No

sekarang di api jika saya menjalankan permintaan dapatkan ini

127.0.0.1:8000/api/customers_view/?in_use=No&customer_name=Tom

Saya akan mendapatkan hasil seperti di bawah ini

{
customer_id:567,
customer_name=Tom,
in_use:No
}

Karena saya mendapatkan customer_id 567 saya perlu mengirim permintaan posting ke Customers_In_Use

Typical post request format with below data to be passed
{
comment:'I will use this data',
customer_id:567
}

Sekarang pertanyaan saya adalah bisakah ini dilakukan sekaligus?

Saat permintaan GET dipanggil di Customers_view, kita harus mengirimkan permintaan posting ke Customers_In_Use

Dari sisi tenang:

Saya telah menulis tampilan daftar sederhana dari tampilan_pelanggan

class customers_views_List(generics.ListAPIView):
    queryset = customers_view.objects.all()
    serializer_class = customers_views_serializer

di Customer_in_use saya telah menggunakan viewset

class customers_In_Use_api(viewsets.ModelViewSet):
    lookup_field = 'customer_id'  
    queryset = customers_in_use.objects.all()  
    serializer_class = customers_in_use_Serializer 

person just10minutes    schedule 08.03.2018    source sumber


Jawaban (1)


Ya kamu bisa,

Ganti saja metode pembuatan kelas Anda Customer_In_Use_api.

Anda juga harus memasukkan komentar, nama_pelanggan, dan in_use di dalam badan permintaan (jika Anda menggunakan jquery ajax, taruh saja di kolom data misalnya)

Anda hanya perlu mendapatkan id Customers_View Anda di kolom in_use dan name.

Setelah itu simpan saja Customer_In_Use Anda yang baru

contoh fungsi buat :

def create(self, request):
    in_use = request.data.get('in_use')
    name = request.data.get('customer_name')
    comment = request.data.get('comment')
    customers_view = get_object_or_404(Customers_View, customer_name=name)
    if customers_view.in_use != in_use:
        return Response({'error': 'Not found'}, status=status.HTTP_404_NOT_FOUND)
    serializer_datas['customer_id'] = customers_view.id
    serializer_datas['comment'] = comment
    serializer = customers_in_use_Serializer(serializer_datas)
    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data, status=status.HTTP_201_CREATED)
    return Response({'error': 'Not found'}, status=status.HTTP_404_NOT_FOUND)

Jangan lupa semua impor seperti status dan get_object_or_404 dan itu akan berfungsi. Kode ini tidak diuji jadi mungkin Anda harus memperbaiki beberapa kesalahan

person greg95000    schedule 08.03.2018
comment
terima kasih banyak atas bimbingan Anda, Beri saya waktu kapan saya akan mencoba pembaruan ini untuk Anda apa yang terjadi. - person just10minutes; 09.03.2018
comment
Saya melihat Anda menyebutkan ini, Anda hanya perlu mendapatkan id Customers_View Anda dengan bidang in_use dan name. Namun nama pelanggan saya mungkin tidak unik. Juga melakukan permintaan dapatkan pada metode pembuatan pemicu Customer_views_List di Customer_In_Use_api? - person just10minutes; 12.03.2018
comment
Jadi apa hasil yang diinginkan 127.0.0.1:8000/api/customers_view/?in_use=No&customer_name=John ? - person greg95000; 13.03.2018
comment
seharusnya { customer_id:123, customer_name=John, in_use:No } Tetapi ketika saya memanggil url yang sama sekali lagi saya akan mendapatkan { customer_id:789, customer_name=John, in_use:No } Karena atribut pelanggan 123 in_use seharusnya diubah menjadi 'Ya' sebagai bagian dari panggilan pertama URL. Jika saya bergantung pada Customer_name dan In_use untuk mengubah data pada model Customers_In_Use maka saya akan mendapatkan 'Ya' untuk kedua pelanggan dalam permintaan awal saya. - person just10minutes; 14.03.2018