我有一个问题,我想知道你是否可以帮助我。
我有一个表格,其中我展示了三种不同的模型并且工作正常。
我的问题是当我想删除该记录时,如您所知,我必须指定要选择的模型,以便删除它。我曾经用三个不同的 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
