django - 提取 ManyToManyField 值
问题描述
我无法从 django 中的 ManyToManyField 中提取值。我没有收到错误,只是一个空的查询集。这是我的代码,如果我做错了什么,请你看一下,让我知道吗?我可以在 Admin 中正确查看所选值,这使我相信我可能已正确存储了这些值,但我无法在我的 views.py 中检索这些值。
模型.py
class Colors(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
ColorId = models.CharField(primary_key=True, max_length=100)
ColorName = models.CharField(default='Na', max_length=100)
class Meta:
ordering = ('ColorName',)
def __str__(self):
return self.ColorName
class Bike(models.Model):
colors= models.ManyToManyField(Colors)
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
表格.py
class SettingsUpdateForm(forms.ModelForm):
colors = forms.ModelMultipleChoiceField(queryset=Colors.objects.all())
class Meta:
model = Bike
fields = [
'colors',
]
我的 html 模板中的一个片段
<div class="form-group col-sm-8 col-md-6">
{{ p_form.colors.label_tag }}
{% render_field p_form.colors class="form-control" %}
</div>
我可以通过执行以下操作来获取我保存的其他参数:
bikes= Bike.objects.all()
colors= bikes.colors
我怀疑这是我做错了什么,但我不知道是什么。
正如我所提到的,我得到一个空的查询集,没有错误,并且我能够在我的管理面板中正确地看到选定的值。在此先感谢您的帮助。
解决方案
Bike.objects.all()
返回一个查询集 - 所有自行车的列表。无论您的字段是什么类型,您都不能直接在查询集上访问该字段;仅在该查询集中的单个模型上。因此,您将始终需要遍历bikes
.
但是,对于多对多,该字段的值本身就是一个查询集。因此,您还需要迭代每辆自行车的颜色。例如:
for bike in Bike.objects.all():
print(bike.name) # assuming it has a name
for color in bike.colors.all():
print(color.ColorName)
推荐阅读
- r - 如何从文本文件中读取列作为现有数据框中的新列?
- firebase - 如何修复 Firestore Flutter 依赖项错误?
- vhdl - 如何为由 for-generate 创建的层次结构中的信号创建 VHDL-2008 别名?
- artifactory - 有没有办法一次导出多个(但不是全部)工件存储库?
- node.js - Mongodb Typescript UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'conn' of undefined at Object.connectToDatabase [as default]
- redux - 使用 put 方法时的 URL 不正确
- c# - ONNX C#:如何读取这个对象并提取概率值?
- c# - 如何使用 Blazor 和 NetCore 5 在电子邮件中将 razor 组件作为正文发送?
- ios - iOS:继承不同的xib文件
- java - 如何使用此类创建实例?