【问题标题】:How to inherit slug form one class to other in django models如何在 django 模型中将 slug 从一个类继承到另一个类
【发布时间】:2021-01-16 06:06:09
【问题描述】:

我的 models.py 文件是:

class Product(models.Model):
    title = models.CharField(max_length=110)
    slug = models.SlugField(blank=True, unique=True)
    price = models.DecimalField(decimal_places=2, max_digits=6)
    discount_price=models.FloatField(blank=True, null=True)
    size = models.CharField(choices=SIZE_CHOICES, max_length=20)
    color = models.CharField(max_length=20, blank=True, null=True)
    image = models.ImageField(upload_to=upload_image_path)
    description = models.CharField(max_length=1000)
    featured = models.BooleanField(default=False)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    time_stamp = models.DateTimeField(auto_now_add=True)

    objects=ProductManager()

    def get_absolute_url(self):#i use this in product_list.html to go to detail page
        #return "/product/{slug}".format(slug=self.slug)
        return reverse("products:detail", kwargs={"slug" : self.slug})


    def __str__(self):
        return str(self.title)

    @property
    def name(self):         #sometime in html i say name istead of title so to make it work i wrote this
        return self.title

def product_pre_save_reciever(sender, instance, *args, **kwargs):#i inherit unique slug generator from utils to here so when i create aa new instance it slug automatically generate. and i i create two t shirts it give a random straing to tshirt 2nd slug
    if not instance.slug:
        instance.slug=unique_slug_generator(instance)

pre_save.connect(product_pre_save_reciever, sender=Product)


class Comment(models.Model):
    product=models.ForeignKey(Product , related_name="comments", on_delete=models.CASCADE)
    name = models.CharField(max_length=255)
    body=models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)


    def __str__(self):
        return '%s - %s'%(self.product.title, self.name)

我希望 slug 字段将其继承到 cmets 中,因为 cmets 必须在他们的特定职位上。当我运行服务器并发表评论时,它正在对特定帖子发表评论,但给了我评论没有属性 slug 的错误。 我的views.py 文件是:

class CommentCreateView(CreateView):
    model = Comment
    form_class = CommentForm
    template_name = 'add-comment.html'
    # fields = '__all__'
    def form_valid(self, form):
        form.instance.product = Product.objects.get(slug=self.kwargs['slug'])
        return super().form_valid(form)
    # success_url = reverse_lazy('products:detail')

    def get_success_url(self):
        return reverse('detail', kwargs={'slug': self.object.slug})

【问题讨论】:

    标签: python django django-models backend


    【解决方案1】:

    评论没有标签,您只需参考产品标签即可。将 get_success_url 更改为:

    def get_success_url(self):
            return reverse('detail', kwargs={'slug': self.object.product.slug})
    

    【讨论】:

    • 它工作,但我也使用注册的命名空间,所以它应该像 def get_success_url(self): return reverse('products:detail', kwargs={'slug': self.object.product.slug })
    【解决方案2】:

    您应该使用self.kwargs['slug'] 而不是self.object.slug 来消除错误。

    def get_success_url(self):
            return reverse('detail', kwargs={'slug': self.kwargs['slug']})
    

    【讨论】:

      猜你喜欢
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-19
      • 2019-03-31
      • 2014-10-08
      • 1970-01-01
      相关资源
      最近更新 更多