我打算使用https://github.com/ghdpro/animesuki/tree/master/animesuki/history并在我自己下面修改它,但是我停在了一个我不能用我的技能跳跃的地方。
关键是,如果我是超级用户,或者我有这个模型中给定的权限,它会添加到我的主模型电影记录中,如果它在没有权限的情况下添加,它只会添加到ChangeRequest中,我的问题是,在批准添加到主电影模型中后,如何做到这一点,当接受和更改字段时,更新给定对象中的数据。它或多或少像我想要的那样工作,但我不能跳过这一步。
我不需要整个解决方案,只需要一些提示,或者一些源代码,我可以从中学习如何做到这一点
编辑:
class Movie(HistoryModel):
title = models.CharField(max_length=200, unique=True)
slug = extension_fields.AutoSlugField(populate_from='title', blank=True)
description = models.TextField(max_length=2000, default='', blank=True)
picture = ImageField(upload_to=user_directory_path, default='img/movie/default/brak_obrazka.jpg', blank=True)
pub_date = models.DateField(blank=True, null=True)
mpaa = models.CharField(max_length=5, choices=AGE_GROUP, default='PG-13')
movie_time = models.CharField(max_length=20, default='90')我的问题是,目前普通用户添加电影仅添加到以上给定链接中的ChangeRequest模型,从Pending = Approved更改后,如何将此模型添加到电影中,然后如果添加更改以更新给定模型
发布于 2018-12-06 01:40:21
我没有看到完整的代码,但我认为你应该看起来像HistoryModel
正如您所看到的here,HistoryModel具有save()和save_related()方法。
你应该看看这里,以了解下面发生了什么。
def save(self, *args, **kwargs):
self._cr = self.create_changerequest()
if self.self_approve and self.sanity_checks and self.sanity_checks_extra:
# Approve immediately if right conditions are met
self._cr.status = ChangeRequest.Status.APPROVED
self._cr.save()
# Save actual model instance if: ChangeRequest object was saved -and- the request was self-approved
# (ChangeRequest object will not have been saved if data was not altered)
if self._cr.pk:
self.log()
if self._cr.status == ChangeRequest.Status.APPROVED:
super().save(*args, **kwargs)
self._cr.set_object(self)
self._cr.save()
# Generate message
verb = {ChangeRequest.Type.ADD: 'Added',
ChangeRequest.Type.MODIFY: 'Updated'} # DELETE or RELATED requests shouldn't be handled by save()
self.add_message(messages.SUCCESS, verb[self._cr.request_type], self._cr.object_type, self._cr.object_str)
elif self._cr.status == ChangeRequest.Status.PENDING:
self.add_message_pending()
# Reset cached property
if hasattr(self, 'has_pending'):
delattr(self, 'has_pending')
def save_related(self, formset):
self._cr = self.create_changerequest(request_type=ChangeRequest.Type.RELATED)
self._cr.related_type = ContentType.objects.get_for_model(formset.model)
self._cr.data_revert = formset_data_revert(formset)
self._cr.data_changed = formset_data_changed(formset)
if self.self_approve and self.sanity_checks and self.sanity_checks_extra:
# Approve immediately if right conditions are met
self._cr.status = ChangeRequest.Status.APPROVED
self._cr.save()
# Save formset if: ChangeRequest object was saved -and- the request was self-approved
# (ChangeRequest object will not have been saved if data was not altered)
if self._cr.pk:
self.log()
if self._cr.status == ChangeRequest.Status.APPROVED:
formset.save()
# Generate message(s)
for obj in formset.new_objects:
self.add_message(messages.SUCCESS, 'Added', self._cr.related_type, obj)
self.log('Add', format_object_str(self._cr.related_type, obj, obj.pk))
for obj in formset.changed_objects:
self.add_message(messages.SUCCESS, 'Updated', self._cr.related_type, obj)
self.log('Modify', format_object_str(self._cr.related_type, obj, obj.pk))
for obj in formset.deleted_objects:
self.add_message(messages.SUCCESS, 'Deleted', self._cr.related_type, obj)
self.log('Delete', format_object_str(self._cr.related_type, obj, obj.pk))
# Refresh data_changed: any new instances should now have a pk set
self._cr.data_changed = formset_data_revert(formset)
self._cr.save()
elif self._cr.status == ChangeRequest.Status.PENDING:
self.add_message_pending()
# Reset cached property
if hasattr(self, 'has_pending'):
delattr(self, 'has_pending')https://stackoverflow.com/questions/53637489
复制相似问题