【问题标题】:Possible to delete an object's specific row in django?可以在 django 中删除对象的特定行吗?
【发布时间】:2021-03-15 06:16:24
【问题描述】:

我有创建几个不同行的模型。像这样……

class Myteam(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
    QB = models.CharField(max_length=80, null=True)
    RB1 = models.CharField(max_length=80, null=True)
    WR = models.CharField(max_length=80, null=True)
    TE = models.CharField(max_length=80, null=True)
    D = models.CharField(max_length=80, null=True)
    K = models.CharField(max_length=80, null=True)

在我的模板中,我循环遍历这些行并将它们显示为 html 表格行。我为每一行添加了一个删除功能,因为我希望应用程序的用户能够从他们的“Myteam”对象中删除一个玩家。问题是,我只能删除整个对象,因为整个对象只有一个 id。模板现在看起来像这样。这里以两行为例。

<tbody>
{% for t in team %}    
    <tr>  
        
        <td id="" > {{ t.QB }}  
             
            <a href="{% url 'delete_player' t.id %}">Delete</a>  
        </td> 
    
    <tr>

        <td> {{ t.RB1 }}  
             
            <a href="{% url 'delete_player' t.id %}">Delete</a>  
        </td> 
    
    </tr>

    <tr>

我确实在这里遇到了一种可能的解决方案,它建议使用 {{ forloop.counter }} 将单个 id 分配给行,但我无法让它按我的意愿工作。

以防万一,这里是views.py

def delete_player(request, id):
    player = Myteam.objects.get(id=id)
    player.delete() 
    return redirect('show')

我觉得可能有一个非常基本的解决方案,但我是 django 的新手,很难找到这样的答案。非常感谢任何帮助。

【问题讨论】:

    标签: python django django-models django-views django-templates


    【解决方案1】:

    好的,所以这些模型字段是数据库表,而不是行。模型的实例是表行。

    您不会删除列,而是将它们设置为 null。例如,您的视图可以将列名作为字符串参数:

    def delete_player(request, id, col_name):
        player = Myteam.objects.get(id=id)
        setattr(player, col_name, None)
        player.save()
        return redirect('show')
    

    此外,由于您的字段是 CharFields,因此最好不要使它们为空(意思是,不要设置 null=True),而是使用空字符串 "" 来指示未设置的值。这样,您就没有两个不同的值来指示空虚。因此,在视图中您将使用setattr(player, col_name, "")

    【讨论】:

    • 这看起来很有道理。实际上,用于传递列名。我不太确定该怎么做。 url 看起来像“path('delete_player/', views.delete_player, name="delete_player")”吗?
    • 现在想想也可以是查询参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 2021-04-17
    • 2013-07-16
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    相关资源
    最近更新 更多