如何在使用序列化和 modelViewSet 创建另一个模型的对象后创建一个模型的对象
How to create object of one Model after creating another Model's object using serialization and modelViewSet
这些是模型:
class Event (models.Model):
status = models.CharField(max_length = 30, blank = True)
time = models.DateTimeField()
point = models.ForeignKey(Point)
person = models.ForeignKey(Person)
device = models.ForeignKey(Device)
organization = models.ForeignKey(Organization)
class Presence(models.Model):
point = models.ForeignKey(Point)
person = models.ForeignKey(Person)
date_from = models.DateTimeField()
date_to = models.DateTimeField()
这是序列化器:
class EventSerializer(serializers.ModelSerializer):
person = serializers.SlugRelatedField(queryset=Person.objects.all(), slug_field='card_tag')
class Meta:
model = Event
fields = ['id','time','point','person','device','organization']
这是API:
class EventAPI(viewsets.ModelViewSet):
serializer_class = cs.EventSerializer
这是URL:
url(r'^event/', api.EventAPI.as_view({'post':'create'}), name='event_create'),
所以我想要这些:
after every creation of Event object, check it by %2 (getting number of objects by card_tag, which is in body of request), if it's number
of events %2 == 0 => create object of Presence, how can I do it ?
谢谢和抱歉
您应该可以使用 perform_create
方法,默认情况下类似于:
def perform_create(self, serializer):
serializer.save()
现在您可以覆盖它并执行几乎任何您想做的事情。
def perform_create(self, serializer):
serializer.save()
if ..something.. % 2:
Presence.objects.create(...)
这些是模型:
class Event (models.Model):
status = models.CharField(max_length = 30, blank = True)
time = models.DateTimeField()
point = models.ForeignKey(Point)
person = models.ForeignKey(Person)
device = models.ForeignKey(Device)
organization = models.ForeignKey(Organization)
class Presence(models.Model):
point = models.ForeignKey(Point)
person = models.ForeignKey(Person)
date_from = models.DateTimeField()
date_to = models.DateTimeField()
这是序列化器:
class EventSerializer(serializers.ModelSerializer):
person = serializers.SlugRelatedField(queryset=Person.objects.all(), slug_field='card_tag')
class Meta:
model = Event
fields = ['id','time','point','person','device','organization']
这是API:
class EventAPI(viewsets.ModelViewSet):
serializer_class = cs.EventSerializer
这是URL:
url(r'^event/', api.EventAPI.as_view({'post':'create'}), name='event_create'),
所以我想要这些:
after every creation of Event object, check it by %2 (getting number of objects by card_tag, which is in body of request), if it's number of events %2 == 0 => create object of Presence, how can I do it ?
谢谢和抱歉
您应该可以使用 perform_create
方法,默认情况下类似于:
def perform_create(self, serializer):
serializer.save()
现在您可以覆盖它并执行几乎任何您想做的事情。
def perform_create(self, serializer):
serializer.save()
if ..something.. % 2:
Presence.objects.create(...)