Когда я хочу вставить новые данные в таблицу cartpaket, у меня появляется эта ошибка «Не удается назначить «7»: «CartPaket.toko_id» должен быть экземпляром «Toko» «

#python #django #model-view-controller #foreign-keys

#python #django #модель-представление-контроллер #внешние ключи

Вопрос:

Это моя таблица Toko

 class Toko(models.Model):
nama_toko = models.CharField(max_length=30)
username = models.CharField(max_length=30)
image_banner = models.ImageField(upload_to='toko')
lokasi = models.CharField(max_length=30)
deskripsi = models.CharField(max_length=30)
status = models.CharField(max_length=30)
boolean= models.BooleanField(default=0)

def __str__(self):
    return self.username
  

Это моя таблица продуктов

 class Produk(models.Model):
nama_produk = models.CharField(max_length=30)
gambar = models.ImageField(upload_to='produk')
size = models.IntegerField(default=500)
deskripsi = models.CharField(max_length=200)
harga_resseler = models.IntegerField(default=0)
harga_agen = models.IntegerField(default=0)
harga_distributor = models.IntegerField(default=0)
harga_retail = models.IntegerField(default=0)
harga_hpp = models.IntegerField(default=0)
  

** Это мой CartPaket **

 class CartPaket(models.Model):
customer_name = models.CharField(max_length=30)
harga = models.IntegerField()
quantity = models.IntegerField(default=0)
total_berat = models.IntegerField(default=200)
subtotal = models.IntegerField(default=0)
total = models.IntegerField(default=0)
tanggal_pesan = models.DateTimeField(auto_now_add=True)
kota_customer_id = models.IntegerField(null=True)
kota_pelapak_id = models.IntegerField(null=True)

toko_id = models.ForeignKey(Toko, verbose_name='toko', on_delete=models.CASCADE, default=1)
produk_id = models.ForeignKey(Produk, verbose_name='produk', on_delete=models.CASCADE, default=1)
def __str__(self):
    return self.customer_name
  

Это мой views.py

                 if CartPaket.objects.filter(customer_name=get_user, produk_id=pro.id,
                                        toko_id=get_toko.id).exists():
                cart = CartPaket.objects.get(produk_id=pro.id, customer_name=get_user,
                                             toko_id=get_toko.id)
                cart.quantity  = jumlah
                cart.save()
            else:
                if jumlah != 0 or jumlah != '':
                    barang_distributor = Barang.objects.get(produk_id=pro.id, toko_id=get_toko.id) 
                    cart = CartPaket(produk_id=pro.id, harga=barang_distributor.harga_jual,
                                     toko_id=get_toko.id, customer_name=request.user.username,
                                     quantity=jumlah, kota_customer_id=kota_customer_id,
                                     kota_pelapak_id=kota_pelapak_id)
                    cart.total_berat = cart.quantity * cart.produk_id.size
                    cart.subtotal = cart.harga * cart.quantity
                    cart.save()
  

Это информация о запросе post
[1]: https://i.stack.imgur.com/OZhnU.png

Это ошибка, которую я получил [2]: https://i.stack.imgur.com/LYQja.png

Ответ №1:

Замените toko_id на toko_id__id . Таким образом, вы говорите, что значение после «=» является идентификатором экземпляра toko_id.

toko_id — это экземпляр, который вы определили в своих моделях. Его идентификатор toko_id.id

Комментарии:

1. да, чувак, ты прав (но я должен заменить toko_id на toko_id_id без двойного подчеркивания), мои большие ошибки в том, что я хочу создать новый cartpaket и заполнить значение toko_id__username , когда toko_id__username находится в таблице Toko ха-ха. у cartpaket есть только toko_id и toko_id_id из экземпляра (таблица Toko). извините за мой английский, я думал, что мой английский такой плохой, ха-ха. спасибо мистеру Джаффу за ответ на мой вопрос. надеюсь, у вас хорошая жизнь 🙂