Итак, у меня есть модель с именем Registration
и модель с именем Deleted Registration
. Я переопределил действие администратора deleted_selected
для Registration
, чтобы вместо удаления запроса оно составило Deleted Registration
с. Дело в том, что он сохраняет только самых важных частей . У регистраций есть несколько внешних ключей и однозначные поля. Очевидно, что просто сохранить наиболее важные данные недостаточно, и мы хотим сериализовать все данные в выбранных моделях регистрации и сохранить их с удаленной регистрацией. Таким образом, когда вы выбираете несколько удаленных регистраций, вы можете нажать Restore deleted registrations
Я повторю то, что хочу, так что это немного, но более понятно: я хочу иметь возможность «удалять» регистрации,где создается новая удаленная регистрация. Таким образом, они могут просматривать удаленные регистрации и, при необходимости, восстанавливать их.
Вот модель регистрации:
class Registration(models.Model):
objects = RegistrationManager()
# Used to identify this object securely in urls without giving the actual primary key
uuid = models.UUIDField(default=uuid.uuid4, editable=False)
sibs_event = models.ForeignKey("EventInstance", null=True, blank=True)
date_registered = models.DateTimeField(auto_now_add=True)
# sibs event for this registration
sibs_weekend = models.ForeignKey(SibsWeekend, null=False)
payment_delegation = models.OneToOneField("PaymentDelegation", null=True, blank=True, related_name="registration", on_delete=models.SET_NULL)
Вот модель удаленных регистраций:
class DeletedRegistration(models.Model):
"""
Just in case of bugs with purging registrants, store
important registrant information in this model.
"""
registrant_name = models.CharField(max_length=100)
registrant_email = models.EmailField(null=True, blank=True)
registrant_phone_num = models.CharField(max_length=13, null=True, blank=True)
delegate_name = models.CharField(max_length=100, null=True, blank=True)
delegate_email = models.EmailField(null=True, blank=True)
num_of_participants = models.PositiveSmallIntegerField(null=True, default=1)
special_event = models.CharField(max_length=100, null=True)
Вот переопределенный delete_selected для регистрации:
def delete_selected(modeladmin, request, queryset):
"""
This overrides the defult deleted_selected because we want to gather the data from the registration and create a
DeletedRegistration object before we delete it.
"""
for registration in queryset:
reg = registration.get_registrant()
if registration.payment_delegation:
delegate_name = registration.payment_delegation.name
delegate_email = registration.payment_delegation.email
else:
delegate_name = None
delegate_email = None
registration_to_delete = DeletedRegistration.objects.create(
registrant_name = reg.full_name(),
registrant_email = reg.email,
registrant_phone_num = reg.phone,
delegate_name = delegate_name,
delegate_email = delegate_email,
# Filtering out people (with True) who couldn't participate in events because we are only interested in the people
# we had to reserve space and prepare materials for.
num_of_participants = registration.get_num_party_members(True),
special_event = registration.sibs_event,
)
registration.delete()
Я ценю вашу помощь! Я просто не знаю, что делать отсюда;Я искал в Интернете, как я могу это сделать, но я не могу обдумать это. Я хочу сохранить сериализованные регистрационные данные как поле в удаленной регистрации, чтобы я мог с помощью действия администратора принять это поле и создать новую регистрацию из него.