【发布时间】:2019-02-08 13:35:46
【问题描述】:
我正在为我的电子商务应用程序创建数字产品。
我创建了一个模型 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'
谁能告诉我我的代码做错了什么?
谢谢
【问题讨论】:
-
product=instance.subscribed_products-->product=instance.subscribed_products.all() -
并且看起来像错字
instance.Name应该是小写的instance.name -
只是关于命名约定的评论。请遵循PEP8 提供的风格指南。不要使用
snake_case作为类名,使用ProductActivation而不是Product_activation。对类属性使用snake_case,例如full_name而不是full_Name。使用动词表示方法,而不是属性,activate应该是is_active。顺便说一句,将activate和deactivate作为属性非常令人困惑。如果两个值都是False,你会怎么做? -
请在这里阅读一下coding-style
-
您想要单件还是全部的产品?如果单身,找到它的规则是什么?
标签: django django-models django-signals