I am working on a Django project where each user can have an associated vendor profile. I’ve created a vendor profile for a user, but when I try to access the vendor’s shop, it always renders the no_vendor.html
page, indicating that the vendor profile does not exist.
View Function:
Here is the view function where I attempt to retrieve the vendor profile:
@login_required
def vendor_shop(request):
try:
vendor = Vendor.objects.get(user=request.user)
except Vendor.DoesNotExist:
# Handle the case where the vendor does not exist
return render(request, 'vendorpannel/no_vendor.html') # Redirect to a page or show a message
all_products = Product.objects.filter(vendor=vendor)
all_categories = Category.objects.all()
context = {
"all_products": all_products,
"all_categories": all_categories,
}
return render(request, 'vendorpannel/shop.html', context)
Models:
Here are the relevant models:
class Vendor(models.Model):
vid=ShortUUIDField(length=10,max_length=100,prefix="ven",alphabet="abcdef")
title=models.CharField(max_length=100,default="Nest")
image=models.ImageField(upload_to=user_directory_path,default="vendor.jpg")
cover_image=models.ImageField(upload_to=user_directory_path,default="vendor.jpg")
description=RichTextUploadingField(null=True, blank=True,default="Normal Vendorco")
address=models.CharField(max_length=100, default="6,Dum Dum Road")
contact=models.CharField(max_length=100, default="+91")
chat_resp_time=models.CharField(max_length=100,default="100")
shipping_on_time=models.CharField(max_length=100,default="100")
authenticate_rating=models.CharField(max_length=100,default="100")
days_return=models.CharField(max_length=100,default="100")
warranty_period=models.CharField(max_length=100,default="100")
user=models.ForeignKey(CustomUser, on_delete=models.SET_NULL ,null=True)
class Meta:
verbose_name_plural="Vendors"
def Vendor_image(self):
return mark_safe('<img src="%s" width="50" height="50"/>'%(self.image.url))
def __str__(self):
return self.title
class Product(models.Model):
pid=ShortUUIDField(length=10,max_length=100,prefix="prd",alphabet="abcdef")
user=models.ForeignKey(CustomUser, on_delete=models.SET_NULL ,null=True)
cagtegory=models.ForeignKey(Category, on_delete=models.SET_NULL ,null=True,related_name="category")
vendor=models.ForeignKey(Vendor, on_delete=models.SET_NULL,null=True,related_name="product")
color=models.ManyToManyField(Color,blank=True)
size=models.ManyToManyField(Size,blank=True)
title=models.CharField(max_length=100,default="Apple")
image=models.ImageField(upload_to=user_directory_path,default="product.jpg")
description=RichTextUploadingField(null=True, blank=True,default="This is a product")
price = models.DecimalField(max_digits=10, decimal_places=2, default=1.99)
old_price = models.DecimalField(max_digits=10, decimal_places=2, default=2.99)
specifications=RichTextUploadingField(null=True, blank=True)
tags=TaggableManager(blank=True)
product_status=models.CharField(choices=STATUS, max_length=10,default="In_review")
status=models.BooleanField(default=True)
in_stock=models.BooleanField(default=True)
featured=models.BooleanField(default=False)
digital=models.BooleanField(default=False)
sku=ShortUUIDField(length=10,max_length=100,prefix="sku",alphabet="abcdef")
date=models.DateTimeField(auto_now_add=True)
updated=models.DateTimeField(null=True,blank=True)
class Meta:
verbose_name_plural="Products"
def product_image(self):
return mark_safe('<img src="%s" width="50" height="50"/>'%(self.image.url))
def __str__(self):
return self.title
def get_percentage(self):
new_price=((self.old_price-self.price)/self.old_price)*100
return new_price
def get_product_price_by_size(self , Size):
return self.price + Size.objects.get(name = Size).price
I have a separate app which carry the VendorProfile
model:
class VendorProfile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='vendor_profile')
company_name = models.CharField(max_length=255)
contact_number = models.CharField(max_length=15)
address = models.TextField()
city = models.CharField(max_length=100)
state = models.CharField(max_length=100)
zip_code = models.CharField(max_length=10)
country = models.CharField(max_length=100)
website = models.URLField(blank=True, null=True)
profile_image = models.ImageField(upload_to='vendor_profiles/', blank=True, null=True)
bio = models.TextField(blank=True, null=True)
def __str__(self):
return self.company_name
Questions:
1.What could be the possible reasons for the VendorProfile
object not being detected in the view function despite existing in the database?
2.Are there any additional steps I should take to debug or fix this issue?
Thank you for your help!
Harry Khan is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.