我有两个表“Event”和“GuestList”。在保存活动时,我们可以提及它是公共活动还是私人活动。如果是私人活动,我们必须有一个访客列表,如果不是,则可以选择拥有访客列表。
现在
1. how to check before saving the event whether the guest list is empty or not.?
2. how to relate those two tables.
我正在使用django框架和postgresql数据库。
class Event(models.Model):
user = models.ForeignKey(UserInfo, null=False)
title = models.CharField(max_length=40)
description = models.CharField(max_length=160)
event_type = models.BooleanField(default=False) #public or private
created = models.DateTimeField(auto_now_add=True)
class GuestList(models.Model):
user = models.ForeignKey(UserInfo, null=False)
event = models.ForeignKey(Event, null=False)
g_email = models.EmailField(null=False, blank=True, unique=True,
validators=[validators.validate_email])
g_name = models.CharField(max_length=40)
attendence = models.CharField(max_length=100, choices=ATTENDENCE_STATUS, null=False)
对于某个活动,用户应该邀请一些客人如何查看私人活动是否有来宾列表?
答案 0 :(得分:0)
由于外键的工作方式(在保存之前需要相关表上的主键,因此必须先保存相关对象),因此无法创建(并保存)GuestList
在创建(并保存)Event
对象之前对象。
但是,您可以编写一个自定义管理器对象来为您处理此逻辑,并始终使用它。这样的事情(未经测试的代码):
class EventManager(models.Manager):
def create_event(guest_list=None, **kwargs):
guest_list = guest_list or []
private = kwargs.get('event_type', False)
if private and not guest_list:
raise ValidationError('Cannot create a private event without a guest list')
event = self.create(**kwargs)
for guest in guest_list:
guest.event = event
guest.save()
return event
class Event(models.Manager):
objects = EventManager()
# rest of you models...
这就是我如何使用这样的经理:
在允许人们将来宾添加到现有事件的视图中,按照您通常的方式执行:
guest_list = GuestList(
g_email = 'new.person@email.com',
g_name = 'New Person',
user = my_user,
attendance = 'yes',
event = the_event_to_add_to,
)
guest_list.save()
为了添加一个全新的事件(或将一个访客列表添加到一个尚不存在的事件,同样的事情):
guest_list = None
if event_type == True: # private! Build up a guest list however you like
guest_list = [
GuestList(g_email='bob@bob.com', g_name='Bob', user=my_user, attendance='yes'),
GuestList(g_email='dan@dan.com', g_name='Dan', user=my_user, attendance='yes'),
GuestList(g_email='terry@terry.com', g_name='Terry', user=my_user, attendance='yes'),
]
event = Event.objects.create_event(
user = my_user,
title = 'My Awesome Event',
description = 'This is going to be great',
guest_list = guest_list,
event_type = event_type
)
event.save()
答案 1 :(得分:0)
@ user2936254,根据我的理解你的问题是 -
因此,如果没有访客列表,您将无法创建私人活动,如果未创建活动,那么您将如何添加访客列表。
我可以针对这个问题提出2个解决方案 -
更改您网站的流程。
更改数据库
我希望我能正确理解你的问题