python - 当我更新具有外键的模型对象时,Django 模型对象被删除

标签 python django

我的 models.py 存档中有这两个模型:

class Ticket(models.Model):
    name = models.CharField(max_length=50)
    description_issue = models.CharField(max_length=1000)
    pub_date = models.DateTimeField("publication date", default=timezone.now)

class PossibleSolution(models.Model):
    title = models.CharField(max_length=50)
    description_solution = models.CharField(max_length=1000)
    final = models.BooleanField()
    sol_date = models.DateTimeField("solution date", default=timezone.now)
    tickets = models.ForeignKey(Ticket, blank=True, null=True)

示例:我有一个票证,其中包含名称、描述和发布日期,然后我创建一个 MaybeSolution,并在创建 MaybeSolution 的表单中选择相关票证。

然后,我以另一种形式更新原始票证,更改其名称,然后丢失我创建的可能解决方案。

这里会发生什么?

编辑:这是我编辑票证的地方

class TicketForm(forms.ModelForm):
    class Meta:
        def __init__(self, *args, **kwargs):
            super(TicketForm, self).__init__(*args, **kwargs)
            self.fields['pub_date'].widget = widgets.AdminSplitDateTime()
            self.fields['closing_date'].widget = widgets.AdminSplitDateTime()
            self.fields['issuer'].widget.attrs['readonly'] = True

        model = Ticket
        fields = '__all__'
        labels = {
            'name': _('Nombre'),
            'description_issue': _('Descripción'),
            'pub_date': _('Fecha de creacion'),
            'closing_date': _('Fecha de cierre'),
            'priority': _('Prioridad'),
            'issuer': _('Creado por'),
            'category': _('Categoría')
        }
        widgets = {
            'pub_date': DateTimeWidget(attrs={'id': "pub_date"}, usel10n=True, bootstrap_version=3),
            'closing_date': DateTimeWidget(attrs={'id': "closing_date"}, usel10n=True, bootstrap_version=3),
        }

这是我发布帖子的 View

def ticket(request, id_ticket):
    if request.method == "POST":
        form = TicketForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.save()
            messages.success(request, 'ticket-saved')
            if id_ticket and int(id_ticket) > 0:
                # I have this because I don't know how to really modify
                Ticket.objects.get(id=id_ticket).delete()
            return redirect('index')

最佳答案

删除执行删除查询的行,

def ticket(request, id_ticket):
    ticket = Ticket.objects.get(id=id_ticket)
    if request.method == "POST":
        form = TicketForm(request.POST, instance=ticket)
        if form.is_valid():
            post = form.save(commit=False)
            post.save()
            messages.success(request, 'ticket-saved')
            return redirect('index')
    else:
        form = TicketForm(instance=ticket)
    return render(request, 'template_name', {'form':form})

关于python - 当我更新具有外键的模型对象时,Django 模型对象被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46342625/

相关文章:

python - boolean 值在 python 中是可变的吗?

python - 处理来自非平面文件的文本(提取信息,就好像它*是*平面文件一样)

python - 命令行变量不会覆盖机器人框架中的套件级别变量

python - 如何有效地将阵列旋转±180°?

python - 如何在mongoengine python中聚合组

mysql - Django:将值从模板存储到 MySql

python - 关于lightFM,如何嵌入特征矩阵并向用户推荐新项目

python - 不断在我的服务器上运行脚本

javascript - django ajax多表单提交

Django开发服务器断管错误