Django / Python - 在对象创建中使用ManyToMany字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django / Python - 在对象创建中使用ManyToMany字段相关的知识,希望对你有一定的参考价值。

有没有办法使用ManyToManyField在模型中创建对象?

以下是模型:

class Booking(models.Model):
    tour_ref = models.CharField(max_length=30)
    customers = models.ManyToManyField(Customer)

class Customer(models.Model):
    name = models.CharField(max_length=40)
    email = models.EmailField()

任务是创建一个新的Booking对象。但是,如何使用Customer表中的特定客户执行此操作? (我会通过电子邮件识别他们)。 (显然不止一个客户)。

非常感谢!

答案

使用add将客户列表添加到新预订中:

booking = Booking.object.create(tour_ref="ref")
customers = list(Customer.objects.filter(email="email@mail.com"))
booking.customers.add(customers)

或者您可以使用反向查找booking_setcreate向特定客户添加预订:

booking = Booking.object.create(tour_ref="ref")
customer.booking_set.create(tour_ref="ref")
另一答案

试试这个,

In [1]: Customer.objects.create(name="name_1",email="asd@asd.com")
Out[1]: <Customer: Customer object>

In [2]: Customer.objects.create(name="name_2",email="asd@asd.com")
Out[2]: <Customer: Customer object>

In [3]: Customer.objects.create(name="name_3",email="qwe@asd.com")
Out[3]: <Customer: Customer object>

In [4]: book = Booking.objects.create(tour_ref="reff_1")

In [5]: cus = Customer.objects.filter(email='asd@asd.com')

In [6]: for c in cus:
   ...:     book.customers.add(c)
   ...:     

In [7]: book.customers.all()
Out[7]: <QuerySet [<Customer: Customer object>, <Customer: Customer object>]>

以上是关于Django / Python - 在对象创建中使用ManyToMany字段的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 3.5 中使对象可等待?

python - 如何在python中使没有簇质心的簇不可见?

如何在 django 中使 @cached_property 无效

如何在 Django Administration 中使文本加粗

Django / Python - 在对象创建中使用ManyToMany字段

如何在 Django 中使 m2m_changed 信号原子化?