我有一个对象,我希望它有两个get_absolute_urls,因为我有两个类别(出租,销售)。但是,如果我将get_absolute_url设置为最后一个'rents‘,则销售中的商品将重定向到’rents‘url,例如: rents/1。
我怎么才能让它起作用呢?
型号:
class Listing(models.Model):
agent = models.ForeignKey(Agent, on_delete = models.DO_NOTHING)
title = models.CharField(max_length=120)
address = models.CharField(max_length = 120)
area = models.CharField(max_length=120)
description = models.TextField(blank = True)
price = models.IntegerField()
bedrooms = models.DecimalField(max_digits=2, decimal_places=1)
bathrooms = models.DecimalField(max_digits=2, decimal_places=1, blank = True, null = True)
garage = models.IntegerField(default = 0)
sqft = models.IntegerField()
categories= (('sale', 'sale'),('rent','rent'))
category= models.CharField(max_length = 10, choices= categories, null = True)
lot_size = models.DecimalField(max_digits=5, decimal_places=1)
photo_main = models.ImageField(upload_to = 'photos/%Y/%m/%d/')
photo_1 = models.ImageField(upload_to = 'photos/%Y/%m/%d/', blank = True, null = True)
photo_2 = models.ImageField(upload_to = 'photos/%Y/%m/%d/', blank = True, null = True)
photo_3 = models.ImageField(upload_to = 'photos/%Y/%m/%d/', blank = True, null = True)
photo_4 = models.ImageField(upload_to = 'photos/%Y/%m/%d/', blank = True, null = True)
is_published = models.BooleanField(default = True)
is_featured = models.BooleanField(default = True)
list_date = models.DateTimeField(default=datetime.now, blank = True)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('sale', args=[str(self.id)])
def get_absolute_url(self):
return reverse('rent', args=[str(self.id)])
urls
path('rents/',rents, name = 'rents'),
path('rents/<int:pk>',RentView.as_view(), name = 'rent'),
path('sales/',sales, name = 'sales'),
path('sales/<int:pk>',SaleView.as_view(), name = 'sale'),
html
<a href="{{ item_vip.get_absolute_url }}"><button class='btn-view fntmk'>View</button></a>
发布于 2021-02-03 14:08:27
由于您有两个类别rent
和sale
,因此可以在get_absolute_url
中使用if
语句。
def get_absolute_url(self):
if self.category == 'sale':
return reverse('sale', args=[str(self.id)])
else:
return reverse('rent', args=[str(self.id)])
但是您已经在category= models.CharField(max_length = 10, choices= categories, null = True)
中设置了null=True
因此,当category为null
时,需要处理这种情况。
def get_absolute_url(self):
if self.category == 'sale':
return reverse('sale', args=[str(self.id)])
elif self.category == 'rent':
return reverse('rent', args=[str(self.id)])
else:
return '/' # Handler null case
https://stackoverflow.com/questions/66019702
复制相似问题