gpt4 book ai didi

python - 接收与多个外键关联的 View 中的对象。 Django 、Python

转载 作者:行者123 更新时间:2023-12-01 08:23:00 24 4
gpt4 key购买 nike

我正在尝试从 models.py 文件中由多个中间外键绑定(bind)的类获取值。如下图所示。

class Masseurs(models.Model):
user = models.CharField(max_length=10) #element do zamiany na unikalna nazwe uzytkownika
name = models.CharField(max_length=70)
description = models.CharField(max_length=400)
supply = MultiSelectField(choices=CUSTOMER_ACCESS)
payment_method = MultiSelectField(choices=PAYMENT_METHODS)
deliver = models.IntegerField()
sex = models.CharField(max_length=1, choices=SEX_MASSEURS)

def average_rating(self):
all_ratings = [list(map(lambda x: x.rating, self.review_set.all()))]
return np.mean(all_ratings)

def __str__(self):
return self.user

# these are the days of the week of the year
class WorkTime(models.Model):
week_of_year = models.CharField(max_length=20)
masseurs = models.ForeignKey(Masseurs, on_delete=models.CASCADE)

def __str__(self):
return self.week_of_year

# these are single days
class DayTime(models.Model):
day_of_week = models.ForeignKey(WorkTime, on_delete=models.CASCADE)
day_name = models.CharField(max_length=30)
full_time = models.BooleanField(default=None)

def __str__(self):
return self.day_name

# these are individual time units such as ('from 8.00-9.00')
class Time(models.Model):
day_time = models.ForeignKey(DayTime, on_delete=models.CASCADE)
compartment = models.CharField(max_length=11)

def __str__(self):
return self.compartment

现在在我的 view.py 中使用 get_object_or_404 我从表“Masseurs”中获取一个对象,如下 View 所示。

views.py

def masseur_detail(request, masseurs_id):
masseur = get_object_or_404(Masseurs, pk=masseurs_id)
daytime = Time.objects.select_related('day_time__day_of_week__masseurs').get(id=masseurs_id)
context = {'masseur': masseur, 'daytime': daytime}
return render(request, 'masseur/masseur_detail.html', context)

然后,我尝试使用“白天”来获取特定按摩师的所有工作时间。但是,他收到错误“时间匹配查询不存在。”

templates.html

{% for time in daytime.time_set.all %}
<span class="badge badge-lg badge-pill badge-success text-uppercase">11.00-
12.00</span>
{% endfor %}

如何从通过许多外键链接到模板中刚刚呈现的各个“Masseurs”的“DayTime”表中获取所有值。

最佳答案

我认为您对时间的查询是错误的。我会做这样的事情:

首先,更新相关名称:

class Time(models.Model):
# rest of the fields
day_time = models.ForeignKey(DayTime, on_delete=models.CASCADE, related_name='times')

然后,代替 select_related ,我们需要使用prefetch related白天,因为我们通过反向关系获取相关对象:

day_time = DayTime.objects.prefetch_related('times').get(day_of_week__masseurs_id=masseurs_id)

预取相关的优点是,它将获取该 DayTime 对象的相关 Time 实例。所以我们不需要对数据库进行额外的查询。

现在我们可以在模板中使用它:

{% for time in daytime.times.all %}  // updated here
<span class="badge badge-lg badge-pill badge-success text-uppercase">11.00-
12.00</span>
{% endfor %}

或者

直接查询如下:

times = Time.objects.filter(day_time__day_of_week__masseurs_id=masseurs_id)

关于python - 接收与多个外键关联的 View 中的对象。 Django 、Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54502924/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com