Проверьте, существует ли foreignKey
Мне нужен способ проверить, была ли запись, связанная с foreignKey, уже создана.
У меня есть 2 модели, project
и fundamentals
. Fundamentals имеет ForeignKey к проекту, так что все добавляемые основы связаны с этим проектом.
class Project(models.Model):
project_name = models.CharField(max_length=50, blank=False, unique=True)
project_website = models.URLField(max_length=50, blank=True)
project_description = models.TextField(blank=True)
ckeditor_classic = models.TextField(blank=True)
project_category = models.CharField(max_length=15, blank=True)
def __str__(self):
return str(self.project_name)
class Fundamentals(models.Model):
project_name = models.ForeignKey(Project, to_field='project_name', on_delete=models.CASCADE)
project_roadmap = models.CharField(max_length=25, blank=True)
project_tier_entry_level = models.CharField(max_length=25, blank=True)
project_tier_entry_level_notes = models.CharField(max_length=25, blank=True)
project_rebranded = models.CharField(max_length=25, blank=True)
def __str__(self):
return str(self.project_name)
В моем представлении я пытаюсь создать страницу на основе If
уже существующей PK
в fundamentals
модели.
pk = Fundamentals.objects.filter(pk=project_id)
if pk:
return MyPage
else:
return MyPage
Вы можете проверить, существует ли хотя бы один объект Fundamentals
для данного project_id
с помощью:
fundamentals = Fundamentals.objects.filter(project_name_id=project_id)
if fundamentals:
return MyPage
else:
return MyPage
При проверке if fundamentals
мы делаем запрос для извлечения всех связанных Fundamentals
. Таким образом, вы можете использовать Fundamentals
после предложения if
, и это не вызовет нового SQL-запроса, если вы перечислите, например, более fundamentals
.
Chack this....
view.py
def Funcation_name(request, pk):
project= get_object_or_404(project, pk=pk)
if fundamentals.exists():
messages.error(request, "Sorry can't be deleted.")
return redirect('project:view_project')
# also tried
# if project in get_user_model().objects.filter(fundamentals__project=project).exists():
elif request.method == 'POST' and 'delete_single' in request.POST:
project.delete()
messages.success(request, '{} deleted.'.format(project.name))
return redirect('project:view_project')
model.py
class Fundamentals(models.Model):
project_name = models.ForeignKey(Project, to_field='project_name', on_delete=models.CASCADE,blank=True, related_name='project')
#.....