簡體   English   中英

在Django模型中保存多對多對象?

[英]Save a many to many object inside a django model?

我仍在學習使用Django,因此在某些方面尚不清楚。

我有一個產品模型和類別模型。 一個產品可以位於多個類別中,並且多個類別可以具有相同的產品。

因此,其多對多關系。 現在,我想允許用戶從html中選擇多個類別,然后保存類別並將其鏈接到產品模型中的類別對象。 我完全迷失了它。

一種方法是使用Modelform,但我不想那樣做。 我還有其他方法可以做到這一點嗎?

models.py:

class Category(models.Model):
    name = models.CharField(max_length=50)
    slug = models.SlugField(max_length=50, unique=True,
                            help_text='Unique value for product page URL, created from name.')
    description = models.TextField()
    is_active = models.BooleanField(default=True)
    meta_keywords = models.CharField("Meta Keywords", max_length=255,
                                        help_text='Comma-delimited set of SEO keywords for meta tag')
    meta_description = models.CharField("Meta Description", max_length=255,
                                        help_text='Content for description meta tag')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('catalog:categories', kwargs={'category_slug': self.slug})

    class Meta:
        ordering = ['-created_at']
        verbose_name_plural = 'Categories'


class Product(models.Model):
    name = models.CharField(max_length=255, unique=True)
    slug = models.SlugField(max_length=255, unique=True,
                            help_text='Unique value for product page URL, created from name.')
    brand = models.CharField(max_length=50)
    sku = models.CharField(max_length=50)
    price = models.DecimalField(max_digits=9, decimal_places=2)
    old_price = models.DecimalField(max_digits=9, decimal_places=2, blank=True, default=0.00)
    thumbnail = models.FileField(upload_to='static/images/products/thumbnails')
    imageurls = models.CharField(max_length=1000)
    is_active = models.BooleanField(default=True)
    is_bestseller = models.BooleanField(default=False)
    is_featured = models.BooleanField(default=False)
    quantity = models.IntegerField()
    description = models.TextField()
    meta_keywords = models.CharField(max_length=255, help_text='Comma-delimited set of SEO keywords for meta tag')
    meta_description = models.CharField(max_length=255, help_text='Content for description meta tag')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    categories = models.ManyToManyField(Category)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('catalog:products', kwargs={'product_slug': self.slug})

    def sale_price(self):
        if self.old_price > self.price:
            return self.price
        else:
            return None

    class Meta:
        ordering = ['-created_at']

views.py的一部分:

if request.method =='POST':
    print ('entered')
    name = request.POST['name']
    brand = request.POST['brand']
    sku = request.POST['sku']
    price = request.POST['price']
    quantity = request.POST['quantity']
    description = request.POST['description']
    imageurls = request.POST['urls']

    print('imageurls',imageurls)

    categorylist = request.POST['categories']
    print('categorylist',categorylist)
    categories =  re.findall(r"[\w']+", categorylist)
    print categories

    imageurls = imageurls.split('~')
    print('iageurls',imageurls)

    for x in categories:
        categoryobj = Category.objects.filter(name=x).values()

        print ('categoryobj',categoryobj)
        # Product.objects.create(name=name,sku=sku,brand=brand,price=price,quantity=quantity,description=description,imageurls=imageurls,categories=categoryobj)
return HttpResponse('success')

嘗試保存上述方式給我錯誤。

product=Product.objects.create(name=name,sku=sku,brand=brand,price=price,quantity=quantity,description=description,imageurls=imageurls)

category_queryset = []    
for x in categories:
    category = Category.objects.filter(name=x).first()
    category_queryset.append(category)

product.categories.set(category_queryset)

暫無
暫無

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

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