如何将唯一的一起约束作为字段 django 回调
how to call back unique together constraints as a field django
我正在尝试回调唯一约束字段,在我的项目中我必须计算所选 M2M 的数量
class Booking(models.Model):
room_no = models.ForeignKey(Room,on_delete=models.CASCADE,blank=True,related_name='rooms')
takes_by = models.ManyToManyField(Vistor)
@property
def no_persons(self):
qnt = Booking.objects.filter(takes_by__full_information=self).count()#but this doesnt work
return qnt
Cannot query "some room information": Must be "Vistor" instance.
class Vistor(models.Model):
full_name = models.CharField(max_length=150)
dob = models.DateField(max_length=14)
city = models.ForeignKey(City,on_delete=models.CASCADE)
class Meta:
constraints = [
models.UniqueConstraint(fields=['full_name','dob','city'],name='full_information')
]
def __str__(self):
return f'{self.full_name} - {self.city} - {self.dob}'
是否可以通过 Booking
模型访问 full_information
?谢谢..
如果您想计算与该预订相关的 Visitor
的数量,您可以使用以下方法计算:
@property
def no_persons(self):
self.<strong>taken_by.count()</strong>
这将对数据库进行额外的查询,因此通常最好让数据库在查询中计算这些。因此,您可以删除 属性,并查询:
from django.db.models import Count
Booking.objects.annotate(
<strong>no_persons=Count('takes_by')</strong>
)
由此 QuerySet
产生的 Booking
将有一个额外的属性 no_persons
以及相关 Visitor
的数量。
我正在尝试回调唯一约束字段,在我的项目中我必须计算所选 M2M 的数量
class Booking(models.Model):
room_no = models.ForeignKey(Room,on_delete=models.CASCADE,blank=True,related_name='rooms')
takes_by = models.ManyToManyField(Vistor)
@property
def no_persons(self):
qnt = Booking.objects.filter(takes_by__full_information=self).count()#but this doesnt work
return qnt
Cannot query "some room information": Must be "Vistor" instance.
class Vistor(models.Model):
full_name = models.CharField(max_length=150)
dob = models.DateField(max_length=14)
city = models.ForeignKey(City,on_delete=models.CASCADE)
class Meta:
constraints = [
models.UniqueConstraint(fields=['full_name','dob','city'],name='full_information')
]
def __str__(self):
return f'{self.full_name} - {self.city} - {self.dob}'
是否可以通过 Booking
模型访问 full_information
?谢谢..
如果您想计算与该预订相关的 Visitor
的数量,您可以使用以下方法计算:
@property
def no_persons(self):
self.<strong>taken_by.count()</strong>
这将对数据库进行额外的查询,因此通常最好让数据库在查询中计算这些。因此,您可以删除 属性,并查询:
from django.db.models import Count
Booking.objects.annotate(
<strong>no_persons=Count('takes_by')</strong>
)
由此 QuerySet
产生的 Booking
将有一个额外的属性 no_persons
以及相关 Visitor
的数量。