【发布时间】:2021-09-04 17:00:44
【问题描述】:
所以我的模型中有一个字段引用了另一个模型。如下所示。 (简化)
class Contents(models.Model):
objects = models.Manager()
body = models.CharField(max_length=10000, blank=True)
image = models.ImageField(null=True, blank=True, upload_to='imgs')
created_at = models.DateField(auto_now_add=True)
updated_at = models.DateField(auto_now_add=False)
class SavedContents(models.Model):
objects = models.Manager()
ref_content = models.ForeignKey(Contents, on_delete=models.CASCADE, related_name='refcontent', null=True)
问题是,在对现有 Content 对象进行更改时,Saved Contents 引用 Contents 的外键关系被破坏。以下是我的观点.py
def update_content(request, content_id):
content_to_update = Contents.objects.get(id = content_id)
content_form = ContentsForm(request.POST, request.FILES)
if request.method == 'POST':
if ans_form.is_valid():
instance = content_form.save(commit=False)
instance.updated_at = str(today)
content_to_update.delete()
instance.save()
return redirect('/')
我知道删除引用关系很明显,因为删除了原始关系。有什么方法可以保持特定 Content 对象和 Saved Content 对象之间的外键关系,无论用户对内容进行了多少次更改?
提前致谢。
【问题讨论】:
-
我不确定我是否完全理解您的问题。除了删除之外,无论用户如何更改内容,外键关系都将持续存在。但是您已经表示您了解删除方面。您能否尝试改写您的问题,以便我可以更好地帮助您?
-
抱歉回复晚了。因此,正如问题中所写,删除现有对象是为了保存新的(编辑的)对象,对吧?所以因为删除了,外键关系也被删除了
on_delete=CASCADE)。我说的对吗? -
但是我需要保留外键关系,不管有多少变化。例如,假设我有一个
Saved Content对象,它引用了一个Content对象,如下所示:{id:1, body:'foo', created_at:2021-09-05}。现在,如果我将Content对象更改为{id:2, body:'bar', created_at:2021-09-05},则外键关系(引用id:1)被删除,对吗?但我需要那个Saved Content对象来维持这种关系。这是否澄清了问题?
标签: django