Necesito una forma de comprobar si el registro vinculado a la clave extranjera ya se ha creado.
Tengo 2 modelos, project y fundamentals . Fundamentals tiene una ForeignKey para el proyecto, de modo que los fundamentos que se agregan están vinculados a ese proyecto.
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) Entonces, en mi opinión, estoy tratando de representar una página basada en If el PK ya existe en el modelo de fundamentals .
pk = Fundamentals.objects.filter(pk=project_id) if pk: return MyPage else: return MyPageActualizar:
@login_required def Add_or_updateFundamentals(request,project_id): project = Project.objects.filter(pk=project_id) check_exist = Fundamentals.objects.filter(project_name_id=project_id) if request.method == 'POST': if check_exist: form = AddFundamentalsForm(request.POST,instance=project[0]) else: form = AddFundamentalsForm(request.POST) if form.is_valid(): if not check_exist: form.instance.project = project form.save() return redirect('dashboard.html') else: if check_exist: form = AddFundamentalsForm(instance=project[0]) return render(request, 'pages/update_fundamentals.html', {'project': project, "form": form}) else: form = AddFundamentalsForm() return render(request, 'pages/add_fundamentals.html', {'project': project, "form": form})Puede verificar si existe al menos un objeto de Fundamentals para el project_id dado con:
fundamentals = Fundamentals.objects.filter( project_name_id=project_id ) if fundamentals: return MyPage else: return MyPage Al verificar if fundamentals hacemos una consulta para recuperar todos los Fundamentals relacionados. Por lo tanto, puede usar Fundamentals después de la cláusula if y no realizará una nueva consulta SQL si enumera, por ejemplo, over fundamentals .
Mira esto....
ver.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')modelo.py
class Fundamentals(models.Model): project_name = models.ForeignKey(Project, to_field='project_name', on_delete=models.CASCADE,blank=True, related_name='project') #.....