Skip to main content
 首页 » 编程设计

python之Django之删除记录中的多个模型

2025年02月15日41qq号

我有一个问题,我想知道你是否可以帮助我。

我有一个表格,其中我展示了三种不同的模型并且工作正常。

我的问题是当我想删除该记录时,如您所知,我必须指定要选择的模型,以便删除它。我曾经用三个不同的 tables 来做到这一点,每个模型一个表,但现在当我为三个模型制作一个表时,我不知道如何去做。

我一直在尝试不同的方法,但没有任何效果。

这是我得到的:

View .py

def eliminar_activos(request, id): 
    opc = activo_opc.objects.get(id=id) #first model 
    odbc = activo_odbc.objects.get(id=id) #second model 
    eip = activo_eip.objects.get(id=id)# third model 
    delete = chain(opc,odbc ,eip ) 
    delete.delete() 
    messages.success(request, "Success!") 
    return redirect('activo') 

网址.py

url(r'^eliminar_activos/(?P<id>\d+)/$',views.eliminar_activos, name='eliminar_activos'), 

模板:

<td><a href="{% url 'eliminar_activos' item.id %}"> Eliminar </a> </td> 

注意:

仅适用于第一个模型,不适用于其余模型。

如果我尝试使用其他两个模型,我会收到此错误:

activo_opc matching query does not exist.

有没有可能不用三张表的方法呢? 谢谢!

请您参考如下方法:

奇怪的是,您根据同一个给定 ID 从 3 个不同模型中删除了行,这是有意为之吗?

您应该在三个模型之间建立关系。 可能是每个其他模型的 OneToOneField。

检查这个:https://docs.djangoproject.com/en/1.10/topics/db/examples/one_to_one/

然后您可以配置您的 oneToOneField,这样当您删除行时,它也会删除关系的其他对象:

class Place(models.Model): 
    name = models.CharField(max_length=50) 
    address = models.CharField(max_length=80) 
 
    def __str__(self):              # __unicode__ on Python 2 
        return "%s the place" % self.name 
 
class Restaurant(models.Model): 
    place = models.OneToOneField( 
        Place, 
        on_delete=models.CASCADE, # deleting a place will delete the associated restaurant 
        primary_key=True, 
    ) 
    serves_hot_dogs = models.BooleanField(default=False) 
    serves_pizza = models.BooleanField(default=False) 
 
    def __str__(self):              # __unicode__ on Python 2 
        return "%s the restaurant" % self.place.name