Как сохранить ссылку в Django при редактировании существующего объекта?
Итак, у меня есть поле в моей модели, которое ссылается на другую модель. Как показано ниже. (упрощенно)
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)
Проблема в том, что связь Foreign Key, где Saved Contents
ссылается на Contents
, нарушается при внесении изменений в существующий объект Content
. Ниже приведен мой views.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
, независимо от того, сколько раз пользователь вносит изменения в содержимое?
Заранее спасибо.
Вам не нужно удалять экземпляр при его обновлении (Django просто обновляет строку базы данных, поэтому удаление экземпляра не имеет смысла):
from django.utils import timezone
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 content_form.is_valid():
instance = content_form.save(commit=False)
instance.updated_at = timezone.now().date()
instance.save()
return redirect('/')