首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Django Admin操作中使用queryset.update?

如何在Django Admin操作中使用queryset.update?
EN

Stack Overflow用户
提问于 2021-09-22 21:03:51
回答 1查看 80关注 0票数 1

我有一个更新模型中的值(包括外键)的Django Admin操作。代码是:

代码语言:javascript
运行
复制
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"

我的订单模型:

代码语言:javascript
运行
复制
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的字段:

代码语言:javascript
运行
复制
medform_status = models.CharField(max_length=200, null=True, choices=FORMSTATUS, default='required')

但我收到一条错误消息,说"Order没有名为‘medicalform__medform_status’的字段“。关于是否可以将queryset.update()与外键一起使用,您有什么想法吗?提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-09-29 07:13:37

在这种情况下,每个外键都需要单独更新,如下所示:

代码语言:javascript
运行
复制
    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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69291254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档