python - 在 Django 中查询多对多关系
问题描述
我正在试验 Django,并试图找出多对多关系。假设我有一个名为“Facility”的模型,同样我创建了另一个名为“Hotels”的模型,其中包含字段“facility”和“featured_facility”,它们都与“Facility”处于多对多关系。仅当“设施”字段中可用时,我才想添加 features_facility 我该怎么做?这是我的模型代码。
class Facility(models.Model):
name = models.CharField(
max_length=100,
validators=[validate_facility_name],
unique=True,
)
description = models.CharField(max_length=100, validators=[validate_facility_description])
can_be_featured = models.BooleanField(default=False)
同样的酒店模型是
class Hotels(models.Model):
hotel_name = models.CharField(
max_length=20,
unique=True,
validators=[validate_hotel_name]
facility = models.ManyToManyField(
Facility,
related_name='hotel_facility',
blank=True,
)
featured_facility = models.ManyToManyField(
Facility,
related_name='featured_hotel_facility',
blank=True,
)
class Meta:
default_permissions = ()
verbose_name = 'Hotel'
verbose_name_plural = 'Hotels'
def __str__(self):
return self.hotel_name
现在我想添加 'featured_facility' 仅当它在 'facility' 中可用时才能在 'featured_facility' 中添加来自 Facility 的新功能设施 我坚持查询多对多关系部分?
解决方案
测试这个
f = Facility(name='hello', can_be_featured=True, ...)
f1 = Facility(name='hello2', can_be_featured=True, ...)
hotel = Hotels.objects.first()
hotel.facility.add(f)
if f1 in hotel.facility.all():
hotel.featured_facility.add(f1)
推荐阅读
- hyperledger-fabric - 启动 Hyperledger Explorer 时出错
- python - 为什么 Anaconda 有两个站点包库?
- javascript - 带有 webpack 的 Kalendar-vue:“您可能需要一个合适的加载器来处理这种文件类型。”嗨
- c# - 当按钮被销毁时,onClick 的监听器是否被销毁?
- javascript - 为没有 Javascript 或 HTML 的表单输入赋值,就像 outlook.com 所做的那样
- python - Tkinter Entry 小部件中 CTRL-V 的 Python 问题
- java - 使用java在json对象中添加字节数组
- php - 检查字符串是否可以是路径(没有警告)
- c# - ASP.NET MVC - 如何检测用户是否正在使用屏幕阅读器
- ios - 从 UIPickerView 中删除触觉反馈