簡體   English   中英

Django 創建項目默認值時創建 Model 不起作用

[英]Django Creating Item Defaults when being Created Model not working

嗨,我正在嘗試為創建的每個項目設置一個默認變體,分別為中小型和大型

我得到'str' object has no attribute 'all'我嘗試修復它但出現其他錯誤,如果此代碼不正確為創建的每個項目創建 3 個默認尺寸我沒有類別,那么最好的方法是什么class 只是我認為可能導致問題的一個選項

這是 model:

class Item(models.Model):
    title = models.CharField(max_length=100)
    price = models.DecimalField(decimal_places=2, max_digits=100)
    category = models.CharField(choices=CATEGORY_CHOICES, max_length=2)
    label = models.CharField(choices=LABEL_CHOICES, max_length=1)
    slug = models.SlugField(unique=True)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)
    active = models.BooleanField(default=True)
    update_defaults = models.BooleanField(default=False)

    def __str__(self):
        return self.title

    class Meta:
        unique_together = ('title', 'slug')

class VariationManager(models.Manager):
    def all(self):
        return super(VariationManager, self).filter(active=True)

    def sizes(self):
        return self.all().filter(category='size')

    def colors(self):
        return self.all().filter(category='color')


VAR_CATEGORIES = (
    ('size', 'size',),
    ('color', 'color',),
    ('package', 'package'),
)

class Variation(models.Model):
    item = models.ForeignKey(Item, on_delete=models.CASCADE)
    category = models.CharField(
        max_length=120, choices=VAR_CATEGORIES, default='size')
    title = models.CharField(max_length=120)
    image = models.ImageField(null=True, blank=True)
    price = models.DecimalField(
        decimal_places=2, max_digits=100, null=True, blank=True)
    objects = VariationManager()
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)
    active = models.BooleanField(default=True)

    def __str__(self):
        return self.title

def item_defaults(sender, instance, created, *args, **kwargs):
    if instance.update_defaults:
        categories = instance.category.all()
        for cat in categories:
            small_size = Variation.object.get_or_create(
                product=instance, category='size', title='Small')
            medium_size = Variation.object.get_or_create(
                product=instance, category='size', title='Medium')
            large_size = Variation.object.get_or_create(
                product=instance, category='size', title='Large')

        instance.update_defaults = False
        instance.save()

post_save.connect(item_defaults, sender=Item)

這部分你需要糾正

def all(self):
        return self.get_queryset().filter(active=True)

並且您需要覆蓋默認對象,這部分需要添加到變化 model 的底部

............
active = models.BooleanField(default=True)
objects = VariationManager()

def __str__(self):
    return self.title

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM