Django 如何访问模板中的不同模型?
我有三种型号 我是否需要更改模型中的连接,并使键字段不是id而是名称Django 如何访问模板中的不同模型?,django,django-views,Django,Django Views,我有三种型号 我是否需要更改模型中的连接,并使键字段不是id而是名称 class Category(models.Model): name = models.CharField(max_length=150, unique=True) description = models.CharField(max_length=250) class Company(models.Model): name = models.CharField(max_length=150, uni
class Category(models.Model):
name = models.CharField(max_length=150, unique=True)
description = models.CharField(max_length=250)
class Company(models.Model):
name = models.CharField(max_length=150, unique=True)
country = models.CharField(max_length=50)
class Motobike(models.Model):
name = models.CharField(max_length=150)
company = models.ForeignKey('Company', on_delete=models.CASCADE)
category = models.ForeignKey('Category', on_delete=models.CASCADE)
和测试:
def test_category(setup):
client = Client()
category_id = Category.objects.get(name='Мотоциклы').id
response = client.get(f'/categories/{category_id}/')
assert response.status_code == 200
response_data = json.loads(response.content.decode('utf-8'))
assert len(response_data) == 2
assert response_data[1]['name'] == 'Ninja Turbo'
assert response_data[1]['vendor'] == 'Kawasaki'
assert response_data[1]['category'] == 'Мотоциклы'
assert response_data[1]['description'] == ''
response = client.get(f'/categories/25/')
assert response.status_code == 404
因此,我认为:
class CategoryView(DetailView):
model = Category
template_name = 'bikes_site/categories_detail.html'
def get_context_data(self, id, **kwargs):
context = get_object_or_404(self.model, id)
context['motobikes'] = Motobike.objects.filter(category_id=id).all()
return context
我得到一个错误:
get\u context\u data()
缺少1个必需的位置参数:“id”
get\u context\u data
的函数签名错误,应该是错误的
def get_context_data(self, **kwargs):
//todo
您的详细视图应该如下所示
class CategoryView(DetailView):
model = Category
template_name = 'bikes_site/categories_detail.html'
pk_url_kwarg = "id"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
category = self.get_object()
context['motobikes'] = Motobike.objects.filter(category_id=category.pk)
return context
多谢各位