我正在 django 上構建幫助臺系統。任何人都可以打開客戶支持票。假設我有一個父物件 #001,并且這個父物件的每個子物件都有相同的票證 ID。請參閱螢屏截圖以更好地理解:

child1 和 child2 具有與其父物件相同的票證 ID。如果所有物件具有相同的票證 ID,如何對它們應用批量更新?假設如果我更改 child2 的票證狀態,那么我希望它也將應用 child1 和父物件的批量更新。知道如何在 Django 上做到這一點嗎?這是我的代碼:
模型.py
class Contact(models.Model):
choice = (("pending","pending"),("solved","solved"),("closed","closed"))
ticket_status = models.CharField(choices=choice,max_length=100,default="pending")
parent =models.ForeignKey('self', on_delete=models.CASCADE,
null=True, blank=True, related_name='contact_parent')
sno = models.AutoField(primary_key=True,)
def save(self,*args,**kwargs):
if not self.parent and not self.support_ticket:
self.support_ticket= str(rand_support_ticket())
if not self.support_ticket:
self.support_ticket = self.parent.support_ticket
super(Contact,self).save(*args,**kwargs)
表格.py
class SupportAgentFrom(forms.ModelForm):
class Meta:
model = Contact
fields = ['support_message','ticket_status']
視圖.py
def AddReplySupport(request,slug):
# fetch the object related to passed id
obj = get_object_or_404(Contact, slug = slug)
# pass the object as instance in form
form = SupportAgentFrom(request.POST or None, instance = obj)
if form.is_valid():
form.instance.support_agent = request.user
form.save()
現在我一次只能更新一個物件。如果它們具有相同的票證 ID,我想一次對多個物件應用批量更新。
#Update1 最終我的問題在遵循 Dan Yishai 解決方案后解決了。在這里,我想稍微解釋一下他的代碼,以便人們可以理解和解決我面臨的此類類似問題。
Contact.objects.filter(
Q(support_ticket=form.instance.support_ticket)
).update( ticket_status="closed")
以上代碼行僅搜索和更新那些具有完全相同票證 ID 的物件。
uj5u.com熱心網友回復:
您可以在單個查詢中更新專案及其所有子項,只需將 if 中的代碼替換為以下內容:
count = Contact.objects.filter(
Q(pk=form.instance.pk) | Q(parent_id=form.instance.pk)
).update(support_agent=request.user)
您可以使用count來驗證至少 1 個物件已被更新,并向用戶顯示修改了多少個物件。
uj5u.com熱心網友回復:
下面我假設sno是獲取查詢集的票證 ID
:
queryset = Contact.objects.filter(sno=form.instance.sno)
現在您可以使用.update()或.bulk_update()。
更新每個物件以具有相同的支持代理:
queryset.update(support_agent=request.user)
更新每個物件以擁有不同的支持代理:
for contact in queryset:
contact.support_agent = value
queryset.bulk_update['support_agent']
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/399331.html
