gpt4 book ai didi

python - 如何更新 django DeleteView 中的关联模型

转载 作者:行者123 更新时间:2023-12-01 07:22:52 25 4
gpt4 key购买 nike

我有几个模型,ContentHostnameHostname 有一个关联模型的 content_id:

class Content(models.Model):
name = models.CharField(max_length=120)
message = models.TextField()

class Hostname(models.Model):
"""
Hostname model
"""
name = models.CharField(max_length=250)
content = models.ForeignKey(Content, on_delete=models.DO_NOTHING, null=True)

在内容删除表单/ View 上,我有一个下拉选择器来指定应将哪些内容分配给与要删除的内容关联的主机名。

内容:

  • 内容1
  • 内容2
  • 内容3

主机名

  • 主机名1(content_id:Content1)
  • 主机名2(content_id:Content2)

行动:

  • 删除Content2,用户删除Content2时在下拉列表中选择Content3
  • 主机名 2 应更新为与内容 3 关联

选择 content_id 时,content_confirm_delete 的模板如下所示:

<select name="content_id">
{% for new_content in contents %}
{% if new_content.id != content.id %}
<option value="{{ new_content.id }}" {% if default_content == new_content.name %}selected{% endif %}>{{ new_content.name }}</option>
{% endif %}
{% endfor %}
</select>

内容删除使用generic.DeleteView:

class ContentsDeleteView(generic.DeleteView):
model = Content
success_url = reverse_lazy('content.list')

最佳答案

到目前为止我已经这样做了:

class ContentsDeleteView(generic.DeleteView):
model = Content
success_url = reverse_lazy('content.list')

def delete(self, request, *args, **kwargs):
self.object = self.get_object()
default_content_id = Setting.objects.get(name='default-content').value
Hostname.objects.select_related().filter(content_id=self.object.id).update(content_id=request.POST.get('content_id', default_content_id))
return super(ContentsDeleteView, self).delete(request, *args, **kwargs)

似乎有效,但不确定这是否是 Django 的“正确”方式。

关于python - 如何更新 django DeleteView 中的关联模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57603251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com