我有一个更新模型中的值(包括外键)的Django Admin操作。代码是:
def staff_reset(self, request, queryset):
updated=queryset.update(regstatus='registered', medicalform__medform_status='required',
staffmonitoringform__monitoring_status = 'required', staffreleaseform__release_status ='required',
staffethics__ethics_status = 'required', staffethics__i_agree=False)
self.message_user(request, ngettext(
'%d staff registration was successfully reset.',
'%d staff registrations were successfully reset.',
updated,
) % updated, messages.SUCCESS)
staff_reset.short_description="Reset Staff Registrations"
我的订单模型:
class Order(models.Model):
REGSTATUS = (
('registered', 'registered'),
('enrolled', 'enrolled'),
('holding', 'holding'),
('withdrawn', 'withdrawn'),
('waiting', 'waiting'),
)
FORMSTATUS = (
('required', 'required'),
('submitted', 'submitted'),
)
customer = models.ForeignKey(Customer, on_delete= models.CASCADE, null = True)
training_registered = models.ForeignKey(TrainingInstance, on_delete= models.SET_NULL, blank = True, null = True)
registration_date = models.DateTimeField(null=True,blank=True)
releaseform = models.ForeignKey(ReleaseForm, on_delete= models.SET_NULL, blank = True, null = True)
staffreleaseform = models.ForeignKey(StaffReleaseForm, on_delete= models.SET_NULL, blank = True, null = True)
monitoringform = models.ForeignKey(MonitoringForm, on_delete= models.SET_NULL, blank = True, null = True)
medicalform = models.ForeignKey(MedicalForm, on_delete= models.SET_NULL, blank = True, null = True)
staffmonitoringform = models.ForeignKey(StaffMonitoringForm, on_delete= models.SET_NULL, blank = True, null = True)
staffethics = models.ForeignKey(StaffEthicsForm, on_delete= models.SET_NULL, blank = True, null = True)
regstatus = models.CharField(max_length=200, null=True, choices=REGSTATUS, default='registered')
enrolment_note = models.TextField(max_length=1000, null=True,blank=True, default="please ensure that ALL THREE forms are submitted. Please note your place on the NWTA will not be offered until all the forms are submitted and processed.")
staffcheck = models.ForeignKey(StaffCheck, on_delete= models.SET_NULL, blank = True, null = True)
par_payment = models.ForeignKey(ParticipantPayment, on_delete= models.SET_NULL, blank = True, null = True)
def __str__(self):
return self.customer.username
MedicalForm模型有一个名为medform_status的字段:
medform_status = models.CharField(max_length=200, null=True, choices=FORMSTATUS, default='required')
但我收到一条错误消息,说"Order没有名为‘medicalform__medform_status’的字段“。关于是否可以将queryset.update()与外键一起使用,您有什么想法吗?提前谢谢。
发布于 2021-09-29 07:13:37
在这种情况下,每个外键都需要单独更新,如下所示:
updated = queryset.update(regstatus='registered')
MedicalForm.objects.filter(
pk__in=queryset.values('medicalform')
).update(medform_status='required')
StaffMonitoringForm.objects.filter(
pk__in=queryset.values('staffmonitoringform')
).update(monitoring_status='required')
StaffReleaseForm.objects.filter(
pk__in=queryset.values('staffreleaseform')
).update(release_status='required')
StaffEthicsForm.objects.filter(
pk__in=queryset.values('staffethics')
).update(ethics_status='required', i_agree=False)
https://stackoverflow.com/questions/69291254
复制相似问题