Джанго: Как получить объект из множества полей? - PullRequest
0 голосов
/ 08 февраля 2019

Я создаю цифровые продукты для своего приложения электронной коммерции.

Я создал модель Product_activation для активации определенного продукта всякий раз, когда пользователь подписан на продукт

Я сделал следующее:

class Profile(models.Model):
   date = models.DateTimeField(auto_now_add=True)
   full_Name = models.CharField(max_length=32,blank=True)
   name = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
   e_mail = models.EmailField(max_length=70,blank=True)
   subscribed_products = models.ManyToManyField(Product,related_name='products_subscribed',blank=True)

class Product(models.Model):
   title        = models.CharField(max_length=32)
   price        = models.DecimalField(default=10000.00,max_digits=10,decimal_places=2)

class Product_activation(models.Model):
   user         = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,null=True,blank=True)
   product     = models.ForeignKey(Product,on_delete=models.CASCADE,related_name='product_activate')
   activate    = models.BooleanField(default=False)

Я создал этот сигнал ниже:

@receiver(pre_save, sender=Profile)
def product_activation(sender,instance,*args,**kwargs):
    if instance.subscribed_products:
        Product_activation.objects.update_or_create(
            User=instance.name,
            product=instance.subscribed_products,
            activate=False,
            deactivate=True
        )

Но возникла проблема в product=instance.subscribed_products строке кода.

Это дает мне следующее сообщение об ошибке:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'ManyRelatedManager'

Может кто-нибудь сказать мне, что я делаю неправильно в своем коде?

Спасибо

1 Ответ

0 голосов
/ 08 февраля 2019

На основе всех комментариев:

сначала прочитайте PEP8 и Стиль кодирования Django .

Чтобы исправить вашу текущую ошибку, вы можете использоватьметод all из ManyRelatedManager, например, он может выглядеть так:

@receiver(pre_save, sender=Profile)
def product_activation(sender,instance,*args,**kwargs):
    for product in instance.subscribed_products.all():
        Product_activation.objects.update_or_create(
            User=instance.name, product=product, activate=False, deactivate=True
        )
...